删除提升名为_mutex

时间:2011-09-02 18:17:35

标签: c++ boost mutex

我有以下代码:

void Func()
{
    boost::interprocess::named_mutex someMutex(boost::interprocess::open_or_create, "MyMutex");
    boost::interprocess::scoped_lock<boost::interprocess::named_mutex> lock(someMutex);

    // ... some stuff happens here
}

许多应用程序都在调用Func。如果Func中出现崩溃,互斥锁没有被释放,所以我正在考虑通过调用boost :: interprocess :: named_mutex :: remove(“MyMutex”)删除互斥锁,如果我检测到我的任何应用程序崩溃了

由于特殊情况,两个线程或进程同时进入受保护区域实际上是安全的,因为Func()的内容仅对第一个运行的应用程序执行操作。

我有两个问题:

  1. 是我打算做个好主意的吗?
  2. 如果出现以下情况:
    • 进程A打开互斥锁并将其锁定(先前已创建互斥锁)
    • 过程B死亡。我们检测到并删除了互斥锁
    • 进程C创建互斥锁并将其锁定
    • 进程A完成运行Func(),scoped_lock析构函数释放互斥锁
    • 进程C完成运行Func(),scoped_lock析构函数释放互斥锁
  3. 现在我有一个“双重释放”的named_mutex,或者进程A在scoped_lock析构函数中没有做任何事情,因为它锁定的named_mutex已被删除了吗?

0 个答案:

没有答案