gpt4 book ai didi

c++ - CreateMutex、OpenMutex 和进程同步

转载 作者:可可西里 更新时间:2023-11-01 14:51:52 24 4
gpt4 key购买 nike

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

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

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

这是怎么回事:

  1. 运行进程 A -> 它看到进程 B 没有运行。到目前为止一切顺利。
  2. 运行进程 B -> 它创建互斥量。
  3. 再次运行进程 A -> 它看到进程 B 现在正在运行。还是不错的。
  4. 我关闭进程 B(它也应该关闭互斥量)。
  5. 运行进程 A -> 它仍然看到进程 B 正在运行! (OpenMutex 不会失败)。

我在这里做错了什么??

这是我的部分代码:

// 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

最佳答案

必须在调用OpenMutex后关闭进程A中的mutex,释放mutex的引用计数,系统才能删除它。请引用MSDN . “互斥锁对象在其最后一个句柄关闭时被销毁。”

有一个工作示例 here

关于c++ - CreateMutex、OpenMutex 和进程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11244123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com