1

난 네이티브 Visual C + + COM 개체가 있고 완전히 스레드 안전 "합법적으로 그것을"자유 스레드 "시스템 레지스트리에 표시 할 수 있도록합니다. 특히 하나 이상의 스레드가 객체의 멤버 변수에 동시에 액세스하지 못하도록해야합니다.이렇게하면 개체가 스레드로부터 안전합니까?

잡기는 내 COM 객체의 정상적인 소비자가 둘 이상의 스레드에서 객체를 동시에 사용하려고 시도하지 않는다고 거의 확신합니다. 그래서 위의 요구 사항을 충족하는 한 가능한 한 간단하게 솔루션을 원합니다.

다음은 내가 생각해 낸 것입니다. 객체의 멤버 변수로 mutex 또는 critical 섹션을 추가합니다. COM에 노출 된 모든 메서드는 제어권을 반환하기 전에 처음부터 뮤텍스/섹션을 가져 와서 해제합니다.

이 솔루션은 세분화 된 액세스를 제공하지 않으며 실행 속도가 느려질 수도 있음을 알고 있지만 동시 액세스는 실제로 발생하지 않습니다.

이 솔루션으로 충분합니까? 더 간단한 해결책이 있습니까?

+0

동시 액세스가 발생하지 않는다고 확신하는 이유는 무엇입니까? 자유 스레드로 표시하는 데 기술적 인 의미가 있습니까? 아니면 확실하게하기 위해 시도하고 있습니까? – Marek

+0

@Marek : Yeap, COM에 의해 적용되는 마샬링을 피하려면 프리 스레딩으로 표시해야합니다. 나는 그것을 아파트 스레드라고 표시하는 것이 기쁠 것입니다. – sharptooth

답변

3

이 솔루션을 사용할 수 있지만 교착 상태가 발생할 경우 어느 정도 수준의 폴백을 제공하는 시간 초과를 처리 할 때 중요한 섹션에 대한 뮤텍스를 권장합니다. 뮤텍스를 잠그는 함수가 이미 동일한 스레드에서 동일한 뮤텍스를 잠근 다른 함수를 호출하지 않도록 매우 조심해야합니다. 인터페이스에 뮤텍스 위에 추가 기능을 추가하지 않는 한 COM 인터페이스에 문제가 없어야합니다. COM에 콜백이 포함되어 있으면 문제가 발생할 수 있습니다.

3

실제 동시 액세스가 실제로 발생하지 않는다고 확신하는 경우 전체 실행을 뮤텍스하는 것은 불합리한 방법이 아닙니다.

관련 문제