6

私はboost::interprocess::scoped_lockを使用しています。アプリケーションが何らかの理由でスコープ内でクラッシュした場合、ミューテックスは解放されません。次にアプリケーションが実行されると (コンピューターを再起動せずに)、ミューテックスがロックされます。

これはどのように機能することを意図していますか?以下にコードの簡単な例を示します。

{
    boost::interprocess::named_mutex lockMutex(boost::interprocess::open_or_create, "lockName");
    boost::interprocess::scoped_lock<boost::interprocess::named_mutex> lock(lockMutex);
    //crash here
}

以下のようなタイムアウトをしてしまいました。ロックの時間を制限しない解決策を思い付くことができる人はいますか?

boost::interprocess::named_mutex named_mtx(boost::interprocess::open_or_create, lockName.c_str());

    while(true)
    {
        if(named_mtx.try_lock())
        {
            break;
        }

        if(!named_mtx.timed_lock(boost::get_system_time() + boost::posix_time::milliseconds(TIMEOUT_MILLISECONDS)))
        {
            named_mtx.unlock();
        }
    }
4

1 に答える 1