当过程崩溃时,如何发布boost :: intercess :: ness_mutex
How to release boost::interprocess::named_mutex when the process crashes
我使用boost::interprocess
在共享内存中创建boost::multi_index
数据结构。有许多客户流程可以访问此数据结构。访问时,我将锁定数据结构。我遇到的问题是,一旦客户端进程访问数据结构并崩溃而不释放被占用的锁定,那么所有其他客户端进程就无法访问数据结构。我使用boost::interprocess::named_mutex
,我知道当过程崩溃时可以自动释放boost::interprocess::file_lock
,但是因为他有很多限制,所以我没有用,我不知道是否有任何解决此问题的好方法,谢谢您!
不要将互斥X放在共享内存中。named_mutex
的提升文档说:
https://www.boost.org/doc/libs/1_70_0/doc/html/boost/boost/interprocess/named_mutex.html
带有全局名称的静音,因此可以从不同的过程中找到。这个互斥X不能放在共享内存中,每个过程都应具有自己的
named_mutex
。
使用名为 mutex的的全部要点是,多个过程可以使用同名的名称创建自己的局部静音对象,并且它们将共享一个可以同步的基础静音对象。如果给定的过程锁定了静音,然后崩溃,则OS将自动释放基础共享的互联克,从而允许另一个过程锁定它(取决于OS,基本的Mutex API可能会报告Mutex已被异常解锁(。<<<<(。/p>
我想您可以尝试使用timed_lock
访问MUTEX,如果您获得了超时,请使用remove
。
相关文章:
- Clang, std::next, libstdc++ and constexpr-ness
- 当过程崩溃时,如何发布boost :: intercess :: ness_mutex
- 带有嵌套结构/类的 POD-ness
- 海湾合作委员会和Clang在lambda的constexpr-ness上存在分歧?
- lambda内部捕获的constexpr变量失去了其constexpr-ness
- 当不需要更改"const-ness"时,"const_cast"的效果是什么?
- C++17 make_optional constexpr-ness
- 在 c++/c++11 中测试"POD-ness"?
- 非成员函数 begin()/cbegin() 及其 constexpr-ness
- 签名:GCC 中的 NESS 优化"bug"
- 实现A(:,k)=b;c++矩阵库中的类matlab语法:避免const-ness
- 在初始化表达式中强制左值的const-ness
- "public"访问限定符和"const"ness`-Wuninitialize
- 在执行二进制序列化时,删除字符串流结果的const-ness是否安全?
- 从变量中移除const-ness