2010-05-11 2 views
12

뮤텍스와 중요 섹션 간의 차이에 대한 기존 질문이 있지만 잠금도 다루지 않습니다.잠금, 뮤텍스 및 중요 섹션 간의 차이점

그래서 중요한 섹션을 프로세스 간의 스레드 동기화에 사용할 수 있는지 알고 싶습니다. 신호 상태와 비 신호 상태

+2

그들은 나에게 똑같은, 내 생각 엔 당신이 세 가지 (Win32?) 사이의 차이점을 만드는 라이브러리를 사용하고 있다는 것입니다. –

+0

CSingleLock과 같은 Lock은 프로세스 간 스레드에 관해서도 스레드 동기화를 지원한다는 말입니까? 나는 뮤텍스 만이 그것을 지원한다고 생각했습니다. 내가 틀렸다면 나를 바로 잡으십시오. – ckv

답변

7

윈도우 크리티컬 섹션은 (대부분) 사용자 모드에서 구현되며 뮤텍스는 컨텍스트를 커널 모드 (느리게)로 전환합니다. 뮤텍스를 소유하면서 스레드가 종료되면 뮤텍스는 포기된다고합니다. 뮤텍스의 상태는 신호로 설정되고 다음 대기 스레드는 소유권을 갖습니다. 임계 영역과 동일한 상황에서 다른 모든 스레드는 차단 된 상태로 유지됩니다. 중요한 섹션의 이름을 지정할 수 없으므로 여러 프로세스를 동기화하는 데 사용할 수 없습니다.

+0

"중요한 섹션은 사용자 모드에서 완전히 구현됩니다." 중요 섹션은 충분한 시간 동안 스핀이있는 경우 스핀보다는 오히려 양보합니다. –

2

CriticalSections을 의미 또한 어떤

는 과정에있다. 명명 된 뮤텍스는 프로세스에서 사용할 수 있습니다.

잠금은 일반적인 용어이므로 어떤 플랫폼을 의미하는지 알 수 없습니다. 예를 들어 C#에서는 잠금 프리미티브가 중요 섹션입니다.

+0

그리고 자물쇠 또한 진행중입니까? – ckv

2

1) 중요 섹션은 사용자 작업과 인터 로킹 작업 사이의 다리입니다. inetrlocked-exchanged 작업을 사용하여 스레드를 잠 그거나 잠금 해제합니다. 뮤텍스보다 빠르게 작동합니다.

2) 뮤텍스는 커널 오브젝트입니다. 그것은 빨리 작동하지 않지만 몇 가지 장점이 있습니다. 우선, 명명 된 뮤텍스는 프로세스 전체에서 사용될 수 있습니다. 둘째, 스레드가 종료되면이 스레드에 의해 잠긴 mutex가 잠금 해제됩니다.

3

중요 섹션은 커널 개체가 아닙니다. 그것들은 어떤 손잡이로도 확인되지 않습니다. 동일한 프로세스에 속하는 스레드를 동기화하는 데에만 사용할 수 있습니다. 프로세스 전반의 동기화에는 사용할 수 없습니다.

CSingleLock (이 문맥에서 자물쇠로 이것을 인용한다고 가정)은 RAII 개념을 사용하는 래퍼 클래스입니다. 그것은 (당신의 생성자에서) 스레드 동기화 객체를 획득하고 쉬운 방법으로 Lock and Unlock API를 호출하는 것을 도와줍니다. (사용중인 동기화 오브젝트의 모든 내부 세부 사항을 숨김).

중요 섹션과 함께 사용하면 CSingleLock을 프로세스 전체에서 사용할 수 없습니다. 뮤텍스는이 목적으로 사용될 수 있습니다.

스레드가 뮤텍스를 획득하고 다른 스레드가 뮤텍스를 획득 할 수없는 경우 뮤텍스의 상태는 비 서명 상태라고합니다. 뮤텍스를 사용할 수 있고 획득 된 스레드가없는 경우 서명 상태입니다.

관련 문제