Я работаю над проектом, который создает два процесса, и я хочу регулировать IPC между ними.
Процессы создаются с помощью функции createProces
, и я хочу использовать мьютекс для выполнения IPC.
В Linux я делаю это с семафорами, однако я прочитал, что для IPC в Windows я должен использовать мьютекс.
В окнах я не могу заставить его работать. Сначала я создаю шаги следующим образом:
CreateProcess(IpApplicationName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &StartInfo, &ProcessInfo);
CreateProcess(IpApplicationName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &StartInfo2, &ProcessInfo2);
Процессы запускаются нормально, но когда я удаляю вызов releaseMutex
из одного процесса, он не будет дожидаться этого процесса. Вот процесс один:
volatile HANDLE hMutex; // Global hMutex Object
int main()
{
hMutex=CreateMutex(NULL,FALSE,NULL);
while(1)
{
WaitForSingleObject(hMutex,INFINITE);
printf("Thread writing to database...\n");
Sleep(2000);
ReleaseMutex(hMutex);
}
return 0;
}
Во втором процессе я открываю мьютекс с открытым мьютексом и комментирую releaseMutex
(чтобы он застрял здесь для тестирования. Однако он будет продолжаться):
int main()
{
while(1)
{
HANDLE hMutex;
hMutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,MUTEXNAME);
WaitForSingleObject(hMutex,INFINITE);
printf("Thread writing to database22...\n");
Sleep(2000);
//ReleaseMutex(hMutex);
}
return 0;
}
Может кто-нибудь сказать мне, что я делаю не так?