c++ - 进程崩溃时如何释放boost::interprocess::named_mutex

标签 c++ boost shared-memory boost-interprocess boost-multi-index

我使用boost::interprocess在共享内存中创建了boost::multi_index数据结构。有许多客户端进程将访问此数据结构。访问时,我将锁定数据结构。我遇到的问题是,一旦客户端进程正在访问数据结构并且崩溃而没有释放占用的锁,则所有其他客户端进程都无法访问数据结构。我使用boost::interprocess::named_mutex,我知道boost::interprocess::file_lock可以在进程崩溃时自动释放,但是由于他有很多限制,所以我没有用,我不知道是否有解决这个问题的好方法,谢谢!

最佳答案

不要在共享内存中放置互斥锁。 named_mutex的增强文档说:

https://www.boost.org/doc/libs/1_70_0/doc/html/boost/interprocess/named_mutex.html

A mutex with a global name, so it can be found from different processes. This mutex can't be placed in shared memory, and each process should have it's own named_mutex.



使用命名互斥锁的全部要点是,多个进程可以使用相同的名称创建自己的本地互斥锁对象,并且它们将共享可以同步的基础互斥锁。如果给定进程锁定了互斥锁然后崩溃,则操作系统将自动释放基础共享的互斥锁,从而允许另一个进程对其进行锁定(取决于操作系统,基础互斥锁API可能会报告互斥锁已被异常解锁)。

关于c++ - 进程崩溃时如何释放boost::interprocess::named_mutex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56865554/

相关文章:

android - 使用不同 NDL 编译的 C/C++ 代码的向前/向后兼容性?

c++ - 如何确定处理器是 32 位还是 64 位?双核处理器是 32 位还是 64 位?

c++ - 如何在 boost::filesystem 中使用 copy_file?

c++ - 在 C++ 中保持对象持久化?

c - 向进程共享信号量

c++ - std::thread 到 std::async 会带来巨大的性能提升。怎么可能?

c++ - c++什么时候实例化方法?

c++ - 如何防止 iostreams::mapped_file_sink 创建可执行 txt 文件

c++ - 遍历一系列范围

python - 在 python 多处理中 fork 后可以创建共享内存吗?