[펌] 동기화 객체
1. 뮤텍스(Mutex) : 커널
모든 thread에 사용될 수 있는 동기화 객체.
mutex를 신호상태로 생성하고 thread에서 wait함수를 호출하면 비신호 상태가 된다. 즉 다른 thread에서 접근 불가.
ReleaseMutex를 사용하여 다시 신호상태로 돌릴 수 있다.
프로그램 중복 실행을 방지하기 위해 사용되기도 한다.
//////////////////////////////////////////////////////////////////////////
// 프로그램 중복 실행 방지
HANDLE hMutex = CreateMutex( NULL, FALSE, "MyProject" );
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
return FALSE;
}
2. 크리티컬섹션(Critical section) : 유저
같은 프로세스내에 사용될 수 있는 동기화 객체.
EnterCriticalSection으로 비신호, LeaveCriticalsection으로 신호 상태가 된다.
LeaveCriticalSection 사용하면 다른 thread의 접근이 가능하다.
3. 세마 포어(Semaphore) : 커널
뮤텍스와 비슷하다. 하지만 접근 가능한 thread의 개수를 지정할 수 있다.
세마포어는 내부적으로 카운트를 가지고 있는데, wating thread가 있으면 카운트가 하나씩 줄어든다.
그리고 그 카운트가 0이 되면 비신호 상태가 되어 다른 thread에서 접근이 불가능하다.
ReleaseSemaphore 사용 시 카운트가 1 증가하여 다른 threa에서 접근이 가능해진다.
WaitforSingleObject 처럼 thread를 정지시키는 효과를 부여하기 위해 모든 thread를 비신호 상태로 만들기도 한다.
'Programming > C/C++' 카테고리의 다른 글
[펌] C++, 가상함수,순수가상함수 (2) | 2010.03.14 |
---|---|
[펌] 프로그램, 프로세스, 스레드 (0) | 2010.03.13 |
[펌] 메모리 할당자의 단편화 문제점 (0) | 2010.03.13 |
[펌] 유니코드 코드변환 (0) | 2010.03.13 |
[펌] 문자열 인코딩 (0) | 2010.03.13 |