2011-08-22 3 views
1

내 프로젝트에 MFC 동기화 개체를 사용해도 문제가 발생하지 않았습니다. 하지만 최근에 나는 MFC synchronization is completely wrong을 설명하는 기사를 발견했습니다. MFC가 어떤 버전인지에 대해서는 확실하지 않지만 최근 버전에서는 MFC가 성숙했다고 믿습니다. Visual Studio 2008 설치와 함께 제공되는 MFC 라이브러리를 사용하고 있습니다. 특히 동기화를 위해이 버전의 MFC 라이브러리를 사용하는 것이 안전합니까?MFC 동기화 개체 사용시의 주의점

+1

그 기사를 읽은 후에 ... 나는 그 기회를 포착하지 않을 것입니다. Win32 동기 프리미티브를 둘러싼 사소한 OOP 래퍼의 경우에는 그다지 가치가 없습니다. 원숭이가 키보드를 두 드렸을 때 만들어지지 않은 스레딩 라이브러리를 사용하는 것이 좋습니다. –

+0

하지만 리소스 누출을 방지하기 위해 RAII를 사용하고 싶습니다. 그렇지 않으면 내 자신의 래퍼 (Wrappers)에 가야합니다. – sarat

+0

또는 [Boost.Thread] (http://www.boost.org/doc/libs/1_47_0/doc/html/thread.html)를 사용할 수 있습니다. 또는 [TBB] (http://threadingbuildingblocks.org/). 또는 [PPL] (http://msdn.microsoft.com/en-us/library/dd492418.aspx) 또는 RAII를 가지고있는 C++ 라이브러리의 수에는 제한이 없습니다. 또는 Win32의 동기화 프리미티브를 객체에 래핑하는 데 걸리는 10 분이 소요됩니다. –

답변

1

뮤텍스 시간 초과시, 평상시 작동을 위해 시간 초과를 사용해서는 안되는 동시 소프트웨어 설계 학교가 있습니다. 그렇다면 시간 초과가없는 뮤텍스 나 다른 잠금이 디자인에 포함될 것이고 타임 아웃은 교착 상태를 처리하기위한 메커니즘입니다. 교착 상태를 표시하지 않도록 시스템을 디자인하려고하지만 발생하면 오히려 영원히 dealocked 머물보다 더 많거나 적은 우아하게 실패합니다.

이렇게 잠금을 사용하면 뮤텍스를 얻지 못하는 이유가별로 중요하지 않을 수 있습니다. 그것은 어쩌면 근본적으로 파손되지 보인다 한편

, 그러나 적어도이 피 MFC의이 정보가 이유없이 손실되고 뮤텍스에 대한 OO 래퍼를 제공 거기에 더 나은 프레임 워크가있다, 그래서 관계없이 다소 부족 이 경우 좋은 생각 인 것 같습니다.

1

작성자의 주장은 모든 조건에 맞지 않지만 특정 조건 집합에 적절합니다. Lock은 BOOL을 반환하고 어떤 이유로 인해 실패했는지 대부분 신경 쓰지 않을 것입니다. 대부분 자물쇠를 사거나 기다리기 위해 전화 할 것입니다. 다른 경우 FALSE는 실패를 의미합니다. 그리고 시간 제한을 확인해야하는 경우 드물지만 기본 API를 사용할 수 있습니다.

재귀 CSingleLock은 어리 석다. 과 동일한 개체를 다시 사용하지 마십시오. 재귀 액세스를 얻으려면 multipe CSinlgeLock 개체를 안전하게 사용할 수 있습니다.

CEvent, CMutex 및 기타 명명 된 개체 클래스를 프로세스간에 사용할 수 있습니다. 나는 그것을 사용했다!

세마포어를 사용하지 않습니다. 다른 사람이 논평 할 수 있습니다.

+0

'Lock'이 "뮤텍스가 자유 롭다", "타임 아웃이 트리거 됨", "뮤텍스의 마지막 홀더가 보관 중일 때 죽었다", "오류"의 차이를 나타내지 않으면 '잠금'이 깨집니다 . 당신이 처리해야 할 조건이 있기 때문에 당신은 그것을 신뢰할 수 없습니다. 최소한 합법적 인 릴리스와 시간 초과의 차이를 알 수 없으면 실제 시간 제한을 사용할 수 없습니다. –

+0

CSingleLock에 대한 평가가 정확합니다. 제 말은 SINGLELock이라는 제목에 있습니다. –

관련 문제