C++11 有 std::condition_variable,它的等待函数是
template< class Predicate >
void wait( std::unique_lock<std::mutex>& lock, Predicate pred );
它需要一个互斥锁。
据我了解 - 它的 notify_one 可以在不同步的情况下调用(我知道惯用的方法是将它与互斥锁一起使用)。
我有一个已经在内部同步的对象- 所以我不需要互斥锁来保护它。一个线程应该等待与该对象关联的某个事件,而其他线程将被通知。
如何在 C++11 中没有互斥锁的情况下进行此类通知?也就是说,使用condition_variable 很容易,但它需要一个互斥体。我考虑过使用假互斥类型,但 std::mutex 被钉在等待界面中。
一种选择是轮询 std::atomic_flag + sleep,但我不喜欢睡觉。