【发布时间】:2013-03-30 17:12:42
【问题描述】:
C++11有std::condition_variable,它的等待函数是
template< class Predicate >
void wait( std::unique_lock<std::mutex>& lock, Predicate pred );
它需要一个互斥体。
据我了解 - 它的 notify_one 可以在不同步的情况下调用(我知道惯用的方法是将它与互斥锁一起使用)。
我有一个对象,它已经在内部同步 - 所以我不需要互斥锁来保护它。一个线程应该等待与该对象关联的某个事件,而其他线程会收到通知。
在 C++11 中如何在没有互斥体的情况下进行此类通知? IE。使用 condition_variable 很容易,但它需要一个互斥锁。我想过用一个假的互斥类型,但是std::mutex被钉在了等待界面。
一种选择是轮询 std::atomic_flag + sleep,但我不喜欢睡觉。
【问题讨论】:
标签: c++ multithreading events c++11 condition-variable