Windows에서 고유한 프로세스별로 커널 개체 (Kernel Object)를 생성하고,
해당 개체의 핸들을 얻기위해, C++ 언어로 작성.
(핸들이 있어야, 커널 개체를 조작 할 수 있음.)
#include <windows.h>
#include <iostream>
int main() {
// 프로세스 고유 이름 생성.
DWORD processId = GetCurrentProcessId();
wchar_t uniqueObjectName[256];
swprintf_s(uniqueObjectName, sizeof(uniqueObjectName) / sizeof(wchar_t), L"MyUniqueMutex_%u", processId);
// LPCWSTR 형식으로 변환.
LPCWSTR lpUniqueObjectName = uniqueObjectName;
// 뮤텍스를 생성.
HANDLE hMutex = CreateMutexW(NULL, FALSE, lpUniqueObjectName);
if (hMutex != NULL)
{
// 뮤텍스로 공유 리소스에 접근을 동기화.
if (WaitForSingleObject(hMutex, INFINITE) == WAIT_OBJECT_0)
{
std::cout << "공유 리소스에 접근 가능." << std::endl;
// 뮤텍스를 해제.
ReleaseMutex(hMutex);
}
else
{
// WaitForSingleObject 호출이 실패한 경우
}
// 핸들 닫기.
CloseHandle(hMutex);
}
else
{
// 뮤텍스 생성 실패
}
return 0;
}
생성된 커널 개체 핸들(
hMutex)을 사용하여 해당 object를 제어 할 수 있다.
완료 되면,CloseHandle함수를 사용하여커널 개체 핸들을 해제 해야 함.