use*_*472 9 c++ boost boost-mutex
我可以boost::lock_guard用来获取一个boost::mutex对象的锁,这个机制将确定一旦boost::lock_guard超出范围,锁将被释放:
{
boost::lock_guard<boost::mutex> lock(a_mutex);
// Do the work
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,a_mutex无论代码块是否被异常退出,都将被释放.
另一方面,a boost::timed_mutex还支持一种方法try_lock_for(period),例如
if(a_timed_mutex.try_lock_for(boost::chrono::seconds(1))) {
// Do the work
a_timed_mutex.unlock(); // <- This is needed!
} else {
// Handle the acquisition failure
}
Run Code Online (Sandbox Code Playgroud)
此代码将不会unlock()在a_timed_mutex如果true该块if声明退出与异常.
问题: Boost(以及据我所知,C++ 11标准)似乎没有提供lock_guard适用于try_lock()或的变体try_lock_for(period).处理第二种情况的"推荐"方式或最佳做法是什么?
Mik*_*our 13
您可以在锁定后创建锁定保护,告诉它采用锁定:
if(a_timed_mutex.try_lock_for(boost::chrono::seconds(1))) {
boost::lock_guard<boost::mutex> lock(a_timed_mutex, boost::adopt_lock_t());
// Do the work
} else {
// Handle the acquisition failure
}
Run Code Online (Sandbox Code Playgroud)
标准的lock_guard也允许这样做.
| 归档时间: |
|
| 查看次数: |
3053 次 |
| 最近记录: |