2012. 10. 11. 19:21
Study/WinAPI
예제 : SemDown, SemaphoreThree
*세마포어 : 한정된 갯수의 자원을 여러 스레드가 사용하려고 할때 접근 제한(서로다른 프로세스에 속한 스레드에도 사용 가능, 운영체제 소유이기 때문-커널객체)
1) 세마포어 객체가 사라지는 시점 - 발급해준 모든 핸들을 반환 받았을때(closeHandle()) 마지막 핸들이 반환 되면 세마포어 객체도 사라짐.
2) 세마포어 객체 핸들 - 처음 생성된 핸들
HANDLE hSem;
hSem=CreateSemaphore(보안속성, 초기값(허용 갯수?), 최대 값(최대 갯수?), 사용자 지정 이벤트 이름);
1) 3번째 인자는 시스템 전체를 기준으로 유일한 키값이 됨.
2) 동일한 이름의 키값으로 세마포어를 생성하면 두번째 부터 실행되는 CreateSemaphore()에서 지정한 초기값은 무시되고 기존에 만들었던 세마포어 객체를 공유 사용
WaitForSingleObject(hSem,INFINITE); 세마포어 객체가 들어오면 세마포어 갯수가 0보다 클 경우 1씩 감소 시킴(-1)
ReleaseSemaphore(세마포어 핸들, 증가시킬 세마포어의 수, NULL); 단, 2번째 인자 값은 세마포어 최대 수를 넘을 경우 동작하지 않음
'Study > WinAPI' 카테고리의 다른 글
[WinAPI] CreateEvent 관련 내용 (0) | 2013.05.07 |
---|---|
[WinAPI] 함수 호출 규약에 관하여.. thiscall, stdcall... 등등 (0) | 2013.05.07 |
[WinAPI] 42장 동기화 계속 (0) | 2012.10.10 |
[WINAPI] 41~42장 멀티 스레드, 동기화 (0) | 2012.10.04 |
[WINAPI] 대화상자- Modal 과 Modeless (0) | 2012.09.13 |