[c++] 프로세스 간 뮤텍스 공유
목차
뮤텍스란 무엇인가요?
뮤텍스(Mutex)는 병렬 프로그래밍 환경에서 공유 리소스에 대한 동시 엑세스를 조율하는 데 사용되는 동기화 매커니즘입니다. 뮤텍스는 한 번에 하나의 스레드 또는 프로세스만이 임계 구역(critical section)에 접근할 수 있도록 합니다.
프로세스 간 공유 메모리를 사용한 뮤텍스 구현
프로세스 간 뮤텍스를 구현하는 한 가지 방법은 공유 메모리를 사용하는 것입니다. 두 개 이상의 프로세스가 동일한 공유 메모리에 접근하여 상호 배제를 구현할 수 있습니다. 이를 위해 Windows에서는 CreateMutex
와 OpenMutex
, POSIX 시스템에서는 shm_open
및 mmap
을 사용하는 등의 방법을 사용할 수 있습니다.
뮤텍스를 사용한 예제 코드
다음은 C++에서 Windows API를 사용하여 프로세스 간 뮤텍스를 구현하는 간단한 예제입니다.
#include <iostream>
#include <windows.h>
int main()
{
HANDLE hMutex = CreateMutex(NULL, FALSE, "Global\\MyMutex");
if (hMutex != NULL)
{
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
std::cout << "Mutex already exists" << std::endl;
}
else
{
std::cout << "Mutex created" << std::endl;
}
// 뮤텍스 사용 후에는 반드시 뮤텍스 핸들을 닫아야 합니다.
CloseHandle(hMutex);
}
else
{
std::cout << "Failed to create mutex" << std::endl;
}
return 0;
}
이 예제는 CreateMutex
함수를 사용하여 “Global\MyMutex”라는 이름의 전역 뮤텍스를 생성합니다. 생성된 뮤텍스는 다른 프로세스에서 OpenMutex
함수를 사용하여 열 수 있습니다.
참고 자료
- MSDN (https://docs.microsoft.com/en-us/windows/win32/sync/using-mutex-objects) - Windows 뮤텍스 관련 문서
- POSIX 공식 문서 (https://pubs.opengroup.org/onlinepubs/9699919799/) - POSIX 시스템의 뮤텍스 관련 문서