【发布时间】:2012-04-16 10:12:52
【问题描述】:
我正在尝试解决 Boost 1.46.1 的锁定问题 - 我尝试了一些方法,但我并不满意 - 因此很想听听干净利落的意见。
线程 A:
- 必须始终等待并获得关键数据部分的锁定
- 更新一些关键数据
- 手动解锁(或限定范围)
线程 B - 绝不能阻塞(try_lock?) - 如果获得锁,则从提到的关键部分读取数据
我不确定我是否需要一个 shared_lock 或者我是否可以解决这个问题。
编辑,我的代码如下所示: 线程 A:
{
// Critical section
boost::mutex::scoped_lock lock( _mutex) ;
}
线程 B:
boost::mutex::scoped_lock lock(_mutex, boost::try_to_lock);
if( lock ) {
}
但我无法记录失败的 try_lock - 所以我想知道它是否真的有效。
问候, 保罗
【问题讨论】:
-
每个锁都是“尝试”类型的函数,您可以使用它来避免阻塞。
-
那么使用
try_lock有什么问题?
标签: c++ multithreading boost locking