boost :: condition_variable等待没有锁定

时间:2010-11-20 11:10:53

标签: c++ multithreading boost

是否可以在boost :: condition_variable上“等待”而无需先获取互斥锁?如果失败了,可以直接使用pthread lib以某种方式完成吗?

为简单起见,我想避免直接进入操作系统层(例如linux上的futex)。但我也不想要互斥锁调用的开销。

我非常清楚在正常情况下这样做的竞争条件。我以另一种方式介绍了这一点。

2 个答案:

答案 0 :(得分:6)

必须首先获取互斥锁。

来自boost.threads文档:

  

空隙   等待(升压:: unique_lock和放大器;   锁)

     

前提条件:锁被锁定   当前主题 [...]

来自pthread_cond_wait手册页:

  

pthread_cond_wait()和   pthread_cond_timedwait()函数是   用于阻止条件变量。   使用锁定的互斥锁调用它们   调用线程或未定义   行为将导致

我不知道任何替代方案。

答案 1 :(得分:0)

不,不是。从condition_variable API规范中可以看出,它总是需要提供一个unique_lock中的可锁定包。但我真的不明白问题出在哪里。这个构造实现了一个“监视器”,没有某种同步对象就无法完成......