我有几个进程,但当时只有一个进程。这意味着让我们说Process1正在运行,如果Process2启动,那么Process2应该等到Process1完成。我正在考虑使用下面的代码来提升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遇到任何处理/未处理的异常,那么Process2不会缺乏获取锁定的情况? 2.在这个用例中是否有任何c#like finally机制在c ++中有用?
最后在C#中是RAII的程序仿真。由于自动存储变量在C ++中具有确定性生命周期(范围方面),因此只需在析构函数中执行解锁。
std
库类型是unique_lock
;提升将有类似的。有锁定互斥锁,解锁时解锁。