본문 바로가기

Programing/멀티코어,병렬,멀티스레드

CreateMutex 를 이용한 하나의프로세스 돌리기, bInitalOwner 인자값

HANDLE WINAPI CreateMutex(
  __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