【发布时间】:2011-07-11 15:55:02
【问题描述】:
我正在做一个创建两个进程的项目,我想规范它们之间的 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 打开 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;
}
谁能告诉我我做错了什么?
【问题讨论】:
-
仅供参考 - Windows 也有信号量 (CreateSemaphore),尽管如果您只需要一个锁,互斥锁会更好,因为它会检测到死互斥锁持有者。
标签: c++ process synchronization ipc