如何避免 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 会有一个类似的。锁定互斥锁,并在销毁时解锁。
我有几个进程,但当时只有一个应该是 运行。这意味着假设 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 会有一个类似的。锁定互斥锁,并在销毁时解锁。