我正在从事一个创建两个进程的项目,我想规范它们之间的 IPC。
进程是使用 createProces
函数创建的,我想使用互斥锁来执行一些 IPC。
在 Linux 中,我使用信号量来执行此操作,但是我已经读到,对于 Windows 中的 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;
}
在过程二中,我用 open mutex 打开互斥体并注释 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;
}
谁能告诉我我做错了什么?
最佳答案
如果您正在检查这些 Win32 API 调用的错误,那将是显而易见的。 OpenMutex
调用一定会失败,因为没有其他人创建过具有该名称的互斥锁,因为编写此代码时。
来自OpenMutex docs :
The OpenMutex function enables multiple processes to open handles of the same mutex object. The function succeeds only if some process has already created the mutex by using the CreateMutex function.
每个 Win32 API 都可能失败 - 您需要检查并正确处理这些错误。
关于c++ - 使用互斥量调节两个进程之间的 IPC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6652934/