gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 14:50:16 90 4
gpt4 key购买 nike

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

90 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com