Я работаю над проектом, который создает два процесса, и я хочу регулировать IPC между ними.Регулирование 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;
}
Может ли кто-нибудь сказать мне, что я делаю неправильно?
FYI - У Windows есть семафоры (CreateSemaphore), хотя, если вам нужно всего лишь блокировать Mutex лучше, поскольку он обнаруживает мертвые держатели мьютексов. – bdonlan