c++ - 使用互斥量调节两个进程之间的 IPC

标签 c++ process synchronization ipc

我正在从事一个创建两个进程的项目,我想规范它们之间的 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/

相关文章:

c++ - 使用 CMake 在项目中链接 curl

c++ - 在 Mac OS X 中检测进程实例

c - 为什么我们不能在某些进程上接受()套接字并从其子进程中接收()数据?

java - for循环中的同步方法

mongodb - Postgres 和 Mongodb 的双向数据库同步

C++ pthread'ed 进程运行速度比单线程问题慢

c++ - Connect() 返回 0 Linux Socket 编程 (c/c++)

Android dalvik虚拟机

c# - 为什么 Process.StandardInput.WriteLine 不向我的流程提供输入?

java - 在多线程应用程序中,是否应该使用 ReadWriteLock 锁定基本类型的 getter/setter?