다음 예제에서는 CreateMutex 함수를 사용하여 뮤텍스 개체를 만들고 CreateThread 함수를 만들어 작업자 스레드를 만듭니다. 참고: 다중 스레드 프로그램 예제의 경우 프로젝트를 다중 스레드 프로젝트 유형으로 설정해야 합니다. 뮤텍스가 중단된 경우 뮤텍스를 소유한 스레드가 종료하기 전에 뮤텍스를 제대로 해제하지 않았습니다. 이 경우 공유 리소스의 상태가 확정되지 않으며 뮤텍스를 계속 사용하면 잠재적으로 심각한 오류가 발생할 수 있습니다. 일부 응용 프로그램은 리소스를 일관된 상태로 복원하려고 시도할 수 있습니다. 이 예제는 단순히 오류를 반환 하 고 뮤 텍스 사용 중지 합니다. 자세한 내용은 뮤텍스 오브젝트를 참조하십시오. 뮤텍스는 단일 리소스에 대한 상호 배타적 액세스를 제공하는 스레드를 제공하는 커널 개체입니다. 뮤텍스 개체의 상태는 스레드가 소유하지 않을 때 신호로 설정되고 소유할 때 신호가 표시되지 않습니다. 한 번에 하나의 스레드만 뮤텍스 개체를 소유할 수 있으며, 이 개체의 이름은 공유 리소스에 대한 상호 배타적 액세스를 조정하는 데 유용하다는 사실에서 비롯됩니다. 호출 프로세스의 모든 스레드는 wait 함수 중 하나를 호출할 때 뮤텍스-개체 핸들을 지정할 수 있습니다. 단일 개체 대기 함수는 지정된 개체의 상태가 신호될 때 반환됩니다.

뮤텍스 의 상태가 신호되면 대기 스레드 하나에 소유권이 부여되고 뮤텍스 상태가 비신호로 변경되고 대기 함수가 반환됩니다. 소유 스레드는 ReleaseMutex 함수를 사용하여 소유권을 해제합니다. 다음 예제에서는 뮤텍스를 사용하여 공유 리소스에 대한 액세스를 조정하고 두 스레드 간에 악수를 하는 방법을 살펴봅니다. 또한 피터슨의 알고리즘과 Dekker의 알고리즘과 뮤텍스 / 세마포를 비교합니다. 좋은 참고 자료는 동시성 의 예술 책입니다. 또한 Qt 설명서에서 판독기 잠금 및 기록기 잠금을 살펴봅니다. 8. 사용할 수 없을 때 «뮤텍스/세마포에 대한 스레드 차단»이란 무엇을 의미합니까? 3. 재귀가 아닌 뮤텍스가 두 번 이상 잠겨 있으면 어떻게 됩니까? 뮤텍스는 생산자 또는 소비자가 키(mutex)를 가지고 작업을 진행할 수 있도록 상호 제외를 제공합니다. 버퍼가 생산자에 의해 채워지는 한 소비자는 기다려야 하며 그 반대의 경우도 마찬가지입니다.

다음 예제에서는 CreateEvent() 함수를 사용하여 두 개의 이벤트 개체를 만듭니다. 그런 다음 WaitForMultipleObjects() 함수를 사용하여 개체 중 하나의 상태가 신호로 설정될 때까지 기다립니다. 다음 예제에서는 CreateSemaphore() 함수를 사용하여 개체가 이미 있는 경우 실패하는 명명된 개체 만들기 작업을 보여 줍니다. 아니요. 신호 대 잠금 메커니즘을 설명하기 때문에 별도로 치료하는 것이 좋습니다. 그러나 이진 세마포는 뮤텍스와 관련된 동일한 중요한 문제(예: 우선 순위 반전)를 경험할 수 있습니다. 우리는 이후 기사에서 이들을 다룰 것입니다. 일부 운영 체제는 API에서 동일한 단어 임계 섹션을 사용합니다.

일반적으로 뮤텍스는 연결된 보호 프로토콜로 인해 비용이 많이 드는 작업입니다. 마침내 뮤텍스의 목적은 원자성 액세스입니다. 훨씬 더 빠르지만 응답성을 파괴 할 수있는 인터럽트를 사용하지 않도록 설정하는 것과 같은 원자 적 액세스를 달성하는 다른 방법이 있습니다. 대체 API는 인터럽트를 사용하지 않도록 설정합니다. 동일한 세션에서 두 번 이상 실행될 때 «인스턴스가 실행 중»이라는 메시지를 인쇄하는 프로그램을 구현합니다. 예를 들어 Windows에서 단어 응용 프로그램 또는 Adobe 리더를 관찰하면 작업 관리자에서 하나의 인스턴스만 볼 수 있습니다. 그것을 구현하는 방법? 프로세스의 스레드가 새 창을 만들기 전에 WaitForSingleObject() 함수를 사용하여 세마포의 현재 개수가 추가 창을 만들 수 있는지 여부를 확인합니다. 대기 함수의 시간 시간 지정 매개 변수가 0으로 설정되므로 세마포가 신호가 지정되지 않은 경우 함수가 즉시 반환됩니다. 운영 체제 용어에 따라 뮤텍스 및 세마포는 동기화 서비스를 제공하는 커널 리소스입니다(동기화 프리미티브라고도 함).