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