当过程崩溃时,如何发布boost :: intercess :: ness_mutex

How to release boost::interprocess::named_mutex when the process crashes

本文关键字:intercess ness mutex boost 何发布 崩溃 过程      更新时间:2023-10-16

我使用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