我有一个资源需要保护在一个进程内以及跨多个进程的访问。我通过创建一个命名互斥体来管理这个boost::interprocess:named_recursive_mutex
,它工作得很好。
#include <boost/interprocess/sync/named_recursive_mutex.hpp>
boost::interprocess::named_recursive_mutex mut(
boost::interprocess::open_or_create, "MY_SHARED_MUTEX_123");
但是,据我了解,这应该最终通过 清理remove()
,即:
mut.remove("MY_SHARED_MUTEX");
remove()
但是,这个调用似乎完全破坏了互斥锁,而不是检查/减少引用计数,所以当我知道没有其他进程正在使用它时,我试图找到一种安全的方法来发出调用。我也可以通过 boost 创建一块共享内存,但这似乎也没有共享引用计数。
我在 SO 上发现了一个类似的问题,但接受的答案似乎不足以满足我的需求,因为它只是指“增强文档”,但没有明确指示何时remove()
可以安全发布。
当我确定最后一个访问它的进程已经关闭或可能崩溃时,如何安全地清理这个命名的互斥锁?
谢谢你。