boost :: condition_variable等待没有锁定

edA*_*a-y 3 c++ multithreading boost

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

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

在正常情况下,我非常清楚这种情况.我有另一种方式.

ice*_*ime 6

在这两种情况下都必须首先获取互斥锁.

来自boost.threads文档:

void wait(boost :: unique_lock&lock)

前提条件:锁定被当前线程锁定 [...]

pthread_cond_wait手册页:

的调用pthread_cond_wait()和那么pthread_cond_timedwait()函数用于在条件变量阻塞. 它们是由调用线程锁定的互斥锁调用的,否则将导致未定义的行为.

我不知道任何其他选择.