是否可以在boost :: condition_variable上“等待”而无需先获取互斥锁?如果失败了,可以直接使用pthread lib以某种方式完成吗?
为简单起见,我想避免直接进入操作系统层(例如linux上的futex)。但我也不想要互斥锁调用的开销。
我非常清楚在正常情况下这样做的竞争条件。我以另一种方式介绍了这一点。
答案 0 :(得分:6)
必须首先获取互斥锁。
来自boost.threads文档:
空隙 等待(升压:: unique_lock和放大器; 锁)
前提条件:锁被锁定 当前主题 [...]
来自pthread_cond_wait手册页:
pthread_cond_wait()和 pthread_cond_timedwait()函数是 用于阻止条件变量。 使用锁定的互斥锁调用它们 调用线程或未定义 行为将导致。
我不知道任何替代方案。
答案 1 :(得分:0)
不,不是。从condition_variable
API规范中可以看出,它总是需要提供一个unique_lock
中的可锁定包。但我真的不明白问题出在哪里。这个构造实现了一个“监视器”,没有某种同步对象就无法完成......