2015-02-04 2 views
1

부울로 보호되는 객체에 액세스하는 boost :: thread_group이있는 경우 내 코드의 동작에 따라 recursive_mutex는 mutex가 그룹 내의 스레드가 동시에 보호 영역에 들어가는 것을 방지하지 않는다는 것을 의미합니다.boost :: thread_group의 모든 스레드가 boost :: recursive_mutex와 관련하여 동일한 스레드를 공유합니까

디버거 (xcode)에 나열된 모든 스레드가 표시되므로 혼란 스럽습니다.

이 것이 알려진 문제입니까? 내가 그것에 대한 문서를 찾을 수 없습니다.

답변

1

부스트 thread_group은 스레드 그룹입니다.

모든 스레드는 정의에 따라 고유하고 고유합니다.


그래서 뮤텍스가 실패 할 경우 ... "mut-ex"(상호 배제)는 프로그래머 오류가 다른 위치에 있음을 나타냅니다.

놀랍지 만 뮤텍스 (재귀 적 또는 비 순차적)에 대한 기대가 정확하지 않을 것이라고 제안합니다 (스레드 그룹의 기대치와 비슷한 방식으로).

놓친 것일 수도 있습니다. 모두 당사자가 공유 객체에 액세스하고 있거나 이러한 액세스의 항상 뮤텍스를 획득해야합니다. 충분하지 않음 다른 스레드를 마술처럼 유지하기 위해 하나의 스레드가 공유 객체를 "보호"하도록하려면.

뮤텍스는 공동의 명제입니다. "임계 영역"이라는 용어는 실제로이 점에서 조금 더 좋습니다. 중요한 데이터를 "마킹"하는 것과는 대조적으로 코드의 임계 영역을 "표시"합니다.

+0

정확히 : 뮤텍스는 변수 나 값 또는 메모리 공간을 보호하지 않습니다. 뮤텍스는 하나의 키가있는 문 집합입니다. 당신은 보호하고자하는 지역의 모든 곳에 문을 두 었으며 어느 순간 어느 문이든 열 수있는 문이 단 하나라는 것을 보장합니다. –

+0

뮤텍스에 대한 나의 이해가 충분히 정확하다고 생각합니다. –

+0

@JasonHarrison 네! 당신이 언급 한 몇 가지 사실에 근거하여 당연히 직설적입니다. (모호했습니다. 그렇게 말하면 믿습니다.) 그 부분을 무시해도 좋습니다. – sehe

관련 문제