我使用boost::interprocess
在共享内存中创建了boost::multi_index
数据结构。有许多客户端进程将访问此数据结构。访问时,我将锁定数据结构。我遇到的问题是,一旦客户端进程正在访问数据结构并且崩溃而没有释放占用的锁,则所有其他客户端进程将无法访问数据结构。我使用boost::interprocess::named_mutex
,我知道boost::interprocess::file_lock
可以在进程崩溃时自动释放,但是由于他有很多限制,所以我没有用,我不知道是否有任何好处解决这个问题的方法,谢谢!
答案 0 :(得分:1)
请勿在共享内存中放置互斥锁。 named_mutex
的增强文档说:
https://www.boost.org/doc/libs/1_70_0/doc/html/boost/interprocess/named_mutex.html
具有全局名称的互斥锁,因此可以在不同的进程中找到它。 该互斥锁不能放在共享内存中,并且每个进程都应该有自己的
named_mutex
。
使用名为 的互斥锁的全部要点是,多个进程可以使用相同的名称创建自己的本地互斥锁对象,并且它们将共享可以在其上同步的基础互斥锁。如果给定进程锁定了互斥锁然后崩溃,则操作系统将自动释放基础共享的互斥锁,从而允许另一个进程对其进行锁定(取决于操作系统,基础互斥锁API可能会报告互斥锁已被异常解锁)。 / p>
答案 1 :(得分:0)
我想您可以尝试使用timed_lock
访问互斥锁,如果超时,则可以使用remove
强制删除互斥锁。