CreateMutex,OpenMutex和Process sync

时间:2012-06-28 11:57:45

标签: c++ windows mutex

我正在尝试执行以下操作:

进程A应该使用OpenMutex来查看进程B是否正在运行。

进程B应该使用CreateMutex让进程A知道它正在运行。 实际上很简单......

这是怎么回事:

  1. 运行流程A - >它看到进程B没有运行。到目前为止一切顺利。
  2. 运行流程B - >它创建了互斥锁。
  3. 再次运行流程A - >它看到进程B正在运行。还是不错。
  4. 我关闭进程B(也应关闭互斥锁)。
  5. 运行流程A - >它仍然看到进程B正在运行! (OpenMutex不会失败)。
  6. 我在这里做错了什么?

    以下是我的代码的一部分:

    // Start of process B
    HANDLE hMutex = ::CreateMutex(NULL, TRUE, MY_MUTEX_NAME);
    MessageBox(NULL, _T("PROCESS B !"), _T("TEST"), 0); 
    CloseHandle(hMutex);
    // End of process B
    
    
    // Start of process A
    HANDLE hMutex = ::OpenMutex(SYNCHRONIZE, FALSE, MY_MUTEX_NAME);
    if(hMutex != NULL)
    {
       MessageBox(NULL, _T("PROCESS B is alive !"), _T("TEST"), 0); 
    }
    CloseHandle(hMutex);
    // End of process A
    

1 个答案:

答案 0 :(得分:5)

在调用OpenMutex以释放互斥锁的引用计数后,必须在进程A中关闭互斥锁,以便系统可以删除它。请参考MSDN。 “当它的最后一个句柄被关闭时,互斥对象就会被破坏。”

有一个工作示例here