2011-10-05 2 views
0

두 스레드에서 사용되는 boost :: mutex가 있습니다. 첫 번째 스레드는 지속적으로 뮤텍스를 잠그고 잠금 해제합니다. 두 번째 스레드는 특정 조건에서만 뮤텍스를 사용합니다. 이 조건이 발생하면 두 스레드가 모두 잠금 상태가됩니다. 이 문제를 일으키는 원인은 무엇일까요?두 스레드가 boost :: mutex :: lock() 호출시 블로킹

내 프로그램에 대한 임의의 사실 : 뮤텍스는 두 스레드간에 공유되는 클래스의 데이터 멤버입니다. 두 번째 스레드에서 뮤텍스 포인터를 사용하는 함수에 전달하지만 첫 번째 스레드에서 뮤텍스를 참조로 사용하고 있습니다.

+0

스레드가 뮤텍스를 사용하는 방법을 나타내는 코드를 게시 할 수 있습니까? – Tim

+0

한 가지 아이디어. 이 함수들 사이에 반복적 인 호출이나 순환 종속성이 있습니까? 그렇다면 반복적 인 뮤텍스 (의도 한 것일 경우)를 사용해야하거나 고전적인 교착 상태가 발생하기 때문에 코드를 검토하면됩니다. –

+0

첫 번째 스레드의 중요 섹션에서 Win32 함수가 호출되고 있다는 것을 알아 냈습니다.이 스레드는 Win32 창을 생성 한 이후 두 번째 스레드에서만 호출해야합니다. 이 예의 경우 SO 에티켓에서 무엇을해야한다고 말하고 있는지 잘 모르겠습니다. 대답은 제가 물었던 질문과는 관련이 없습니다. 우리가 투표를 끝내겠습니까? –

답변

1

상태를 알린 후 주 스레드에서 뮤텍스를 잠금 해제했는지 기억 했습니까? 교대로 교착 상태에 빠졌습니까?

+0

예, 교착 상태가 발생했는데 사용중인 뮤텍스 때문이 아니라 다른 함수가 두 스레드가 Win32 이벤트 큐라고 생각하는 것을 차단하도록했기 때문입니다. –

관련 문제