critical section, mutex, semaphore 비교

 Object  When Nonsignaled  When Signaled  Successful Wait Side Effect  Semaphore  Successful wait  When count>0 (ReleaseSemaphore)  Decrements count by 1   Mutex  Successful wait  When unowned by a thread (ReleaseMutex) Gives ownership to thread   Critical  Successful wait (EnterCriticalSection)  When unowned by a thread (LeaveCriticalSection) Gives ownership to thread 위는 Richter 책에 있는 표를 인용했다. 1. 크리티컬 섹션 유저모드 동기화 객체이다. 커널모드 객체가 아니기 때문에 가볍고 같은 프로세스내에 스레드 동기화에 사용할 수 있다. EnterCriticalSection을 호출하면 객체는 비신호 상태가 되고 LeaveCriticalSection을 호출하면 신호상태로 바뀌어서 다른 스레드들이 접근가능하다. 2. 뮤텍스 커널모드 동기화 객체이다. 커널모드라서 크리티컬 섹션보다는 느리지만 프로세스를 넘어서 모든 스레드에 사용될 수 있는 동기화 객체이다. 뮤텍스를 신호상태로 생성한 후 스레드에서 Wait 함수를 호출하면 뮤텍스는 비신호 상태가 되어서 다른 스레드에서는 접근하지 못한다. ReleaseMutex를…