Search
Duplicate
🏆

커널 객체를 이용한 쓰래드 동기화(4) - 세마포어

Category
S/W 엔지니어
Tags
C++
Programming Applications for Microsoft Windows
thread synchronization
쓰래드 동기화
Created time
2004/10/26
제프리 릭터의 Programming Applications for Microsoft Windows. (4th Editon) 에 담긴 내용입니다.
세마포어(semaphore) 커널 객체: 리소스 카운팅에 이용된다. 사용 카운트 외에도 두 개의 부호없는 32비트 값(최대 리소스 카운트, 현재 리소스 카운트)을 갖는다. 최대 리소스 카운트는 세마포어가 제어할 수 있는 최대 리소스 갯수를 나타내고, 현재 리소스 카운트는 현재 사용 가능한 리소스의 갯수를 나타낸다.
세마포어가 따르는 규칙
현재 리소스 카운트가 0보다 크면, 세마포어는 신호 상태에 있다.
현재 리소스 카운트가 0이면, 세마포어는 비신호 상태에 있다.
시스템은 세마포어의 현재 리소스 카운트가 음수가 되는 것을 허용하지 않는다.
현재 리소스 카운트는 최대 리소스 카운트보다 클 수 없다.
HANDLE CreateSemaphore ( PSECURITY_ATTRIBUTE psa, LONG lInitialCount, LONG lMaximumCount, PCTSTR pszName ); lInitialCount : 현재 가능한 리소스의 갯수. 초기값으로 임의의 수를 정할 수 있다. lMaximumCount : 가능한 리소스의 최대 갯수 HANDLE OpenSemaphore ( DWORD fdwAccess, BOOL bInheritHandle, PCTSTR pszName ); //이 함수는 단지 세마포어의 현재 리소스 카운트에 //lReleaseCount의 값을 더한다. //plPreviousCount더하기 전의 현재 리소스 카운트 BOOL ReleaseSemaphore ( HANDLE hsem, LONG lReleaseCount, PLONG plPreviousCount );
C++
복사