HANDLE WINAPI CreateMutex(
__in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes,
__in BOOL bInitialOwner,
__in_opt LPCTSTR lpName
);
__in_opt LPSECURITY_ATTRIBUTES lpMutexAttributes,
__in BOOL bInitialOwner,
__in_opt LPCTSTR lpName
);
//중복 프로세스 실행 방지.
HANDLE hMu=CreateMutexA(NULL, FALSE,"abcde");
if(GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMu);
MessageBoxA(NULL, "ABC","ABC",MB_OK);
exit(1);
}
bInitalOwner 값이 true 이면 뮤텍스를 생성한 스레드가 소유권을 가지게 되고
false 이면 가지지 않게끔 생성.
WaitForSingleObject, WaitForMultipleObjects 등의 함수 사용시
해당스레드가 소유권을 가지게 됨.
소유권은 ReleaseMutex를 호출하거나 해당 스레드가 종료 될때까지 유지됨.
이때 Wait함수 호출시 bInitalOwner가 TRUE일경우 소유권이 중첩되게 되고
ReleaseMutex를 한번 호출해서 중첩된 소유권이 모두 사라지지않는다...
그래서 bIntialOwner를 FALSE 로 생성하는게 편하다.
출처: http://sinarn.blog.me/130078038010
'Programing > 멀티코어,병렬,멀티스레드' 카테고리의 다른 글
volatile과 메모리 배리어 (1) | 2011.11.17 |
---|---|
CriticalSection에 관해.. (0) | 2011.03.28 |
multi thread 환경에서 동기화 및 stl 사용법 (0) | 2011.01.28 |