윈도우 뮤텍스 예제

shared_mutex = CreateMutex (NULL, TRUE, lpszMutex); 두 번째 프로세스는 OpenMutex() 함수를 사용하여 기존 뮤텍스에 대한 핸들을 엽니다. 지정된 이름의 뮤텍스 개체가 없으면 이 함수가 실패합니다. 액세스 매개 변수는 모든 대기 함수에서 핸들을 사용하는 데 필요한 mutex 개체에 대한 전체 액세스를 요청합니다. 다음 예제에서는 CreateMutex 함수를 사용하여 뮤텍스 개체를 만들고 CreateThread 함수를 만들어 작업자 스레드를 만듭니다. 첫 번째 프로세스는 CreateMutex() 함수를 사용하여 뮤텍스 개체를 만듭니다. 이름이 같은 기존 개체가 있는 경우에도 함수가 성공합니다. printf(«OpenMutex() : %s 뮤텍스가 성공적으로 열렸습니다.n», MName); 핸들 hMutex = OpenMutex(뮤텍스_ALL_ACCESS, FALSE, lpszMutex); 뮤텍스가 중단된 경우 뮤텍스를 소유한 스레드가 종료하기 전에 뮤텍스를 제대로 해제하지 않았습니다. 이 경우 공유 리소스의 상태가 확정되지 않으며 뮤텍스를 계속 사용하면 잠재적으로 심각한 오류가 발생할 수 있습니다. 일부 응용 프로그램은 리소스를 일관된 상태로 복원하려고 시도할 수 있습니다. 이 예제는 단순히 오류를 반환 하 고 뮤 텍스 사용 중지 합니다.

자세한 내용은 뮤텍스 오브젝트를 참조하십시오. 뮤텍스 개체에 대한 핸들이 있는 모든 스레드는 wait 함수 중 하나를 사용하여 뮤텍스 개체의 소유권을 요청할 수 있습니다. 뮤텍스 개체가 다른 스레드가 소유하는 경우 wait 함수는 요청 스레드를 차단하여 소유 스레드가 ReleaseMutex 함수를 사용하여 뮤텍스 개체를 해제할 때까지 차단합니다. wait 함수의 반환 값은 신호로 설정된 뮤텍스 의 상태 이외의 이유로 함수가 반환되는지 여부를 나타냅니다. 스레드는 CreateMutex 또는 CreateMutex 함수를 사용하여 뮤텍스 개체를 만듭니다. 생성 스레드는 mutex 개체의 즉각적인 소유권을 요청할 수 있으며 뮤텍스 개체의 이름을 지정할 수도 있습니다. 또한 명명되지 않은 뮤텍스를 만들 수도 있습니다. 뮤텍스, 이벤트, 세마포 및 타이머 개체의 이름에 대한 자세한 내용은 프로세스 간 동기화를 참조하십시오. 뮤텍스는 단일 리소스에 대한 상호 배타적 액세스를 제공하는 스레드를 제공하는 커널 개체입니다. 뮤텍스 개체의 상태는 스레드가 소유하지 않을 때 신호로 설정되고 소유할 때 신호가 표시되지 않습니다. 한 번에 하나의 스레드만 뮤텍스 개체를 소유할 수 있으며, 이 개체의 이름은 공유 리소스에 대한 상호 배타적 액세스를 조정하는 데 유용하다는 사실에서 비롯됩니다. 호출 프로세스의 모든 스레드는 wait 함수 중 하나를 호출할 때 뮤텍스-개체 핸들을 지정할 수 있습니다.

단일 개체 대기 함수는 지정된 개체의 상태가 신호될 때 반환됩니다. 뮤텍스 의 상태가 신호되면 대기 스레드 하나에 소유권이 부여되고 뮤텍스 상태가 비신호로 변경되고 대기 함수가 반환됩니다.