如何避免 Process2 一直等待 Process1 释放 named_mutex 的情况

How to avoid scenario where Process2 keeps waiting for Process1 to release the named_mutex

我有几个进程,但当时只有一个应该是 运行。这意味着假设 Process1 是 运行,如果 Process2 启动,则 Process2 应该等到 Process1 完成。我正在考虑使用如下代码 boost named_mutex

#include <iostream>
#include <boost/interprocess/sync/named_mutex.hpp>

using namespace boost::interprocess;

int main()
{
    named_mutex mutex(open_or_create, "some_name");

    try
    {
        mutex.lock();

        // Do work

        mutex.unlock();
    }
    catch (const std::exception& ex)
    {
        mutex.unlock();
        std::cout << ex.what();
    }
}

问题:
1. 如果 Process1 遇到任何 handled/unhandled,我想确保不会出现 Process2 无法获取锁的情况异常?
2. c++ 中是否有类似 finally 机制的 c# 可以帮助解决这个用例?

最后在 C# 中是 RAII 的过程模拟。由于自动存储变量在 C++ 中具有确定性生命周期(范围方面),只需在析构函数中解锁即可。

std库类型为unique_lock; boost 会有一个类似的。锁定互斥锁,并在销毁时解锁。