c++ - 在 C/C++ 中将互斥锁放入 Windows 上的内存映射文件中

标签 c++ windows mutex memory-mapped-files

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

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

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

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

据我所知,简单地使用 PTHREADS 互斥锁是不可能的,因为 PTHREADS 的 Windows 端口不支持 SHARED 属性。

最佳答案

要共享一个同步对象,给它起一个名字,并在创建对象时在每个进程中使用相同的名字。

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

Critical sections无法共享,但速度更快。

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

关于c++ - 在 C/C++ 中将互斥锁放入 Windows 上的内存映射文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14401973/

相关文章:

c++ - 如果 constexpr 与 sfinae

c++ - 如何在 Unreal Editor 内容浏览器中找到 Unreal GameMode?

c++ - 检索和编辑 vector 中对象的私有(private)成员

.net - 如何检测两个文件是否在同一个 "volume"上?

windows - 运行 JAR 后隐藏 cmd 屏幕

c++ - 为什么 "stdint.h"的实现不同意 UINT8_C 的定义?

c++ - 设备驱动程序: Windows ReadFile function timeout

c - C 中基本互斥体导致程序锁定

互斥锁解锁和从函数返回之间是否会出现竞争条件

c++ - 锁定特定线程