1. Mutex 커널 오브젝트 기반 동기화
WaitForSingleObject() 호출 결과는 2가지
- 호출 후 블로킹 상태
: Mutex 오브젝트가 다른 쓰레드에게 소유되어서 현재 non-signaled 상태에 놓여있는 상황
- 호출 후 반환된 상태
: Mutex 오브젝트의 소유가 해제되었거나 소유되지 않아서 signaled 상태에 놓여있는 상황
Mutex는 WaitForSingleObject() 가 반환될 때, 자동으로 non-signaled 상태가 되는 auto-reset 모드 커널 오브젝트.
따라서, WaitForSingleObject()는 결과적으로 Mutex를 소유할려고 할 때 호출하는 함수가 된다.
2. Semaphore 커널 오브젝트 기반 동기화
세모포어 값이라 불리는 정수를 기반으로 동기화가 이뤄지고, 이 값이 0보다 작아질 수 없다. 윈도우의 세마포어 값은 Semaphore 커널 오브젝트에 등록
세마포어 값이 0 - non-signaled
세마포어 값이 0보다 큰 경우 - signaled
WaitForSingleObject()가 호출되면
- 세마포어 값이 0보다 큰 경우에 반환 -> 세마포어 값을 1 감소 시키면서 non-signaled 상태가 되게 함(세마포어 값이 1 감소해서 0이 되는 경우)
- 0이라면 블로킹 상태
3. Event 커널 오브젝트 기반 동기화
Mutex나 Semaphore와 다른 점 : auto-reset 모드와 manual-reset 모드 중 하나를 선택
-> WaitForSingleObject()가 반환을 한다고 해서 non-signaled 상태로 되돌려지지 않는다.
'프로그래밍' 카테고리의 다른 글
Asynchronous Notification IO 모델 (0) | 2012.06.06 |
---|---|
소켓 데이터 입력 함수 - recv() (0) | 2012.06.06 |
커널 오브젝트와 핸들 (0) | 2012.06.06 |
파일에 대한 오해 - 바이너리 모드 오픈, 텍스트 모드 오픈 (0) | 2012.06.02 |
feof 함수 (0) | 2012.06.02 |