뮤텍스

Mutex 개체를 사용하여 리소스에 대한 전용 액세스를 제공할 수 있습니다. Mutex 클래스는 Monitor 클래스보다 시스템 리소스를 더 많이 사용하지만 애플리케이션 도메인 경계를 넘어 마샬링될 수 있으며 여러 대기와 함께 사용될 수 있고 서로 다른 프로세스에서 스레드를 동기화하는 데 사용될 수 있습니다. 관리되는 동기화 메커니즘의 비교는 동기화 기본 형식 개요를 참조하세요.

코드 예제는 Mutex 생성자에 대한 참조 설명서를 참조하세요.

뮤텍스 사용

스레드는 소유권을 요청하는 뮤텍스의 WaitOne 메서드를 호출합니다. 호출은 뮤텍스를 사용할 수 있거나 선택적 시간 제한 간격이 경과할 때까지 차단합니다. 뮤텍스의 상태는 스레드가 소유하지 않는 경우 신호를 받습니다.

스레드는 해당 ReleaseMutex 메서드를 호출하여 뮤텍스를 해제합니다. 뮤텍스에는 스레드 선호도가 있습니다. 즉, 뮤텍스를 소유하는 스레드에 의해서만 해제될 수 있습니다. 스레드가 소유하지 않는 뮤텍스를 해제하는 경우 스레드에서 ApplicationException이 throw됩니다.

Mutex 클래스는 WaitHandle에서 파생되므로 WaitHandle의 정적 WaitAll 또는 WaitAny 메서드를 호출하여 다른 대기 핸들과 결합하여 Mutex의 소유권을 요청할 수도 있습니다.

스레드가 Mutex를 소유하는 경우 해당 스레드는 해당 실행을 차단하지 않고 반복되는 대기 요청 호출에서 동일한 Mutex를 지정할 수 있지만 소유권을 해제하는 횟수만큼 Mutex를 해제해야 합니다.

중단된 뮤텍스

스레드가 Mutex를 해제하지 않고 종료하는 경우 뮤텍스는 중단되도록 명령됩니다. 뮤텍스가 보호하는 리소스가 일관성 없는 상태로 남을 수도 있으므로 이는 종종 심각한 프로그래밍 오류를 나타냅니다. AbandonedMutexException은 뮤텍스를 획득하는 다음 스레드에서 throw됩니다.

시스템 차원 뮤텍스의 경우 중단된 뮤텍스는 애플리케이션이 갑자기 종료되었음을 나타낼 수 있습니다(예: Windows 작업 관리자를 사용하여).

로컬 및 시스템 뮤텍스

뮤텍스는 로컬 뮤텍스 및 명명된 시스템 뮤텍스로 두 가지 유형입니다. 이름을 허용하는 생성자를 사용하여 Mutex 개체를 만드는 경우 해당 이름의 운영 체제 개체에 연결됩니다. 명명된 시스템 뮤텍스는 운영 체제 전체에서 볼 수 있으며 프로세스 작업을 동기화하는 데 사용될 수 있습니다. 동일한 명명된 시스템 뮤텍스를 나타내는 여러 Mutex 개체를 만들 수 있으며 OpenExisting 메서드를 사용하여 기존 명명된 시스템 뮤텍스를 열 수 있습니다.

로컬 뮤텍스는 프로세스 내에만 존재합니다. 로컬 Mutex 개체에 대한 참조가 있는 프로세스의 모든 스레드에서 사용할 수 있습니다. 각 Mutex 개체는 별도 로컬 뮤텍스입니다.

시스템 뮤텍스에 대한 액세스 제어 보안

.NET은 명명된 시스템 개체에 대해 Windows 액세스 제어 보안을 쿼리하고 설정하는 기능을 제공합니다. 시스템 개체는 전역적이며 따라서 코드에서 잠글 수 있으므로 생성 순간부터 시스템 뮤텍스를 보호하는 것이 좋습니다.

뮤텍스의 액세스 제어 보안에 대한 자세한 내용은 MutexSecurityMutexAccessRule 클래스, MutexRights 열거형, Mutex 클래스의 GetAccessControl, SetAccessControlOpenExisting 메서드, Mutex(Boolean, String, Boolean, MutexSecurity) 생성자를 참조하세요.

참고 항목

시스템 뮤텍스에 대한 액세스 제어 보안은 .NET Framework에서만 사용할 수 있으며 .NET Core 또는 .NET 5 이상에서는 사용할 수 없습니다.

참고 항목