mfc 뮤텍스 예제

CMutex 개체를 사용하려면 필요할 때 CMutex 개체를 생성합니다. 대기할 뮤텍스의 이름을 지정하고 응용 프로그램에서 처음에 해당 뮤텍스이름을 소유해야 합니다. 그런 다음 생성자가 반환될 때 뮤텍스에 액세스할 수 있습니다. CSyncObject:::제어된 리소스에 액세스하는 작업이 완료되면 잠금을 해제합니다. 뮤텍스 및 CRITICAL_SECTION 오브젝트는 잠금 개체의 Win32 버전이며 Win32 세마포어는 세마포를 계산합니다. 뮤텍스가 중단된 경우 뮤텍스를 소유한 스레드가 종료하기 전에 뮤텍스를 제대로 해제하지 않았습니다. 이 경우 공유 리소스의 상태가 확정되지 않으며 뮤텍스를 계속 사용하면 잠재적으로 심각한 오류가 발생할 수 있습니다. 일부 응용 프로그램은 리소스를 일관된 상태로 복원하려고 시도할 수 있습니다. 이 예제는 단순히 오류를 반환 하 고 뮤 텍스 사용 중지 합니다. 자세한 내용은 뮤텍스 오브젝트를 참조하십시오. WaitForMultipleObjects는 신호가 여러 개체를 기다리는 데 사용됩니다. 세마포어 스레드 동기화 개체에서 카운터가 0으로 이동하면 개체가 신호되지 않습니다. 자동 재설정 이벤트 및 뮤텍스는 개체를 해제할 때 신호가 해제되지 않습니다.

수동 재설정 이벤트는 대기 함수의 상태에 영향을 미칩니다. 동일한 프로세스 내에서 CreateMutex 함수를 사용하여 두 개의 명명된 Mutex를 만드는 경우 두 번째 CreateMutex 함수는 오류를 반환합니다. 다른 프로세스에서 두 개 이상의 Mutex 개체를 만들 면 동일한 이름으로 처음 호출할 때 CreateMutex 함수가 뮤텍스를 만듭니다. 다른 CreateMutex 함수는 이전 Mutex 개체의 핸들을 반환합니다. 이 프로세스의 스레드가 데이터베이스에 쓰면 먼저 WaitForSingleObject 함수를 사용하여 뮤텍스의 소유권을 요청합니다. 스레드가 뮤텍스의 소유권을 얻은 경우 데이터베이스에 기록한 다음 ReleaseMutex 함수를 사용하여 뮤텍스의 소유권을 해제합니다. MFC CMutex, CCriticalSection, CSemaphore 및 CEvent 클래스는 Microsoft Foundation 클래스 라이브러리에서 스레드를 동기화하는 데 사용됩니다. 이러한 방식으로 CMutex 개체에 의해 제어되는 리소스에 액세스하려면 먼저 리소스의 액세스 멤버 함수에서 CSingleLock 또는 CMultiLock 형식의 변수를 만듭니다.

그런 다음 잠금 개체의 Lock 멤버 함수(예: CSingleLock::Lock)를 호출합니다. 이 시점에서 스레드는 리소스에 대한 액세스 권한을 얻거나, 리소스가 해제될 때까지 기다렸다가 액세스 권한을 얻거나, 리소스가 해제되고 시간 시간이 지나갈 때까지 기다리며 리소스에 대한 액세스 권한을 얻지 못합니다. 어쨌든 리소스는 스레드에서 안전한 방식으로 액세스되었습니다. 리소스를 해제하려면 잠금 개체의 잠금 해제 멤버 함수(예: CSingleLock::Unlock)를 사용하거나 잠금 개체가 범위를 벗어나도록 허용합니다. 임계 섹션 개체는 뮤텍스 오브젝트와 동일합니다. 그러나 Mutex 개체를 사용하면 프로세스 전체에서 개체를 동기화할 수 있습니다.

Comments

Comments are closed.