3

Windows 是否提供可以放置在内存映射文件中并跨多个进程使用的任何类型的互斥锁?

理想情况下,它必须是完全独立的,这样它就可以在文件中独立存在,即使在重新启动时也是如此。此外,如果我只是在没有进程运行的情况下手动删除文件,则不会泄露任何资源。

如果可能,该解决方案还应提供随附的“条件”概念,该概念也应该是可以位于共享内存映射文件中的对象。

简而言之,我需要类似于具有 SHARED 属性的 PTHREADS 互斥锁。

据我了解,无法简单地使用 PTHREADS 互斥锁,因为 PTHREADS 的 Windows 端口不支持 SHARED 属性。

4

3 回答 3

3

要共享同步对象,请在创建对象时为其命名并在每个进程中使用相同的名称。

以下同步对象可以通过这种方式在进程之间共享:

关键部分不能共享,但速度更快。

测试或等待这些对象是通过 wait 系列函数完成的,通常是WaitForMultipleObjects

于 2013-01-18T15:47:15.283 回答
2

将文件用作自己的互斥锁:使用该LockFileEx功能并让每个人都同意在他们想要声明互斥锁时锁定文件的字节 0。

于 2013-01-18T17:34:28.037 回答
1

那是不可能的。互斥对象本身存在于内核空间中,以保护它免受用户代码干扰其状态。您获得的句柄仅对获得它的进程有效。从技术上讲,您可以使用 DuplicateHandle() 并将返回的句柄放入 mmf 中,但前提是您拥有访问内存部分的其他进程的句柄。这是相当脆弱的。

这就是您可以在 CreateMutex() 函数中为互斥锁指定名称的原因。另一个进程通过在 OpenMutex 调用中使用相同的名称来访问它。

于 2013-01-18T15:48:08.833 回答