이 코드는 다음과 같이 실행될 것입니다.
1. 세마포어가 있으며 스레드 2개만 액세스를 허락합니다.
2. 그리고 스레드 3개가 세마포어에 액세스를 요청합니다.
3. 그러면 스레드 2개만 액세스를 허가받고 나머지를 실행합니다.
4. 일을 마친 스레드는 세마포어에 액세스가 끝났음을 통보합니다.
5. 먼저 액세스를 허가받던 스레드 중 하나가 액세스 끝을 통보하는 순간 대기하고 있던 나머지 스레드가 액세스를 허가받습니다.
윈도에는 다음 세마포어 관련 함수가 있습니다.
• CreateSemaphore: 세마포어를 생성합니다. 자원을 몇 개 허락하는지도 이때 설정합니다.
• WaitForSingleObject: 세마포어가 자원 액세스를 요청하고, 허락할 때까지 기다립니다.
• ReleaseSemaphore: 세마포어에 자원 액세스가 끝났음을 통보합니다.
• CloseHandle: 세마포어를 파괴합니다.
세마포어가 자원 액세스를 단 1개만 허락하게 설정한다면 뮤텍스와 다를 바가 없습니다.