我可以使用boost :: lock_guard来获取对boost :: mutex对象的锁定,这个机制将确定一旦boost :: lock_guard超出范围,锁将被释放:
{
boost::lock_guard<:mutex> lock(a_mutex);
// Do the work
}
在这种情况下,无论代码块是否被异常退出,都将释放a_mutex.
另一方面,boost :: timed_mutex也支持方法try_lock_for(句点),例如,
if(a_timed_mutex.try_lock_for(boost::chrono::seconds(1))) {
// Do the work
a_timed_mutex.unlock(); //
} else {
// Handle the acquisition failure
}
如果if语句的true块退出并带有异常,则此代码不会解锁()a_timed_mutex.
问题:Boost(以及据我所知,C 11标准)似乎没有提供与try_lock()或try_lock_for(句点)一起使用的lock_guard变体.处理第二种情况的“推荐”方式或最佳做法是什么?