qbl*_*ble 15 c++ events multithreading condition-variable c++11
C++ 11有std :: condition_variable,它的等待函数是
template< class Predicate >
void wait( std::unique_lock<std::mutex>& lock, Predicate pred );
Run Code Online (Sandbox Code Playgroud)
它需要一个互斥量.
据我所知 - 它的notify_one可以在没有同步的情况下调用(我知道惯用的方法是将它与互斥锁一起使用).
我有一个对象,其已经在内部同步 -所以我并不需要一个互斥量来保护它.一个线程应该等待与该对象关联的某个事件,并且其他线程将被通知.
如何在C++ 11中没有互斥的情况下进行此类通知?即使用condition_variable很容易,但它需要一个互斥量.我想过使用假的互斥锁类型,但是在等待界面中固定了std :: mutex.
一个选项是轮询std :: atomic_flag + sleep,但我不喜欢睡觉.
inf*_*inf 13
使用std::condition_variable_any您可以使用任何实现BasicLockable概念的类.
鉴于对此的不良感觉,我检查了std::condition_variable_anylibc ++ 的实现.事实证明它使用了一个平原std::condition_variable和a std::shared_ptr到a std::mutex,因此肯定会有一些开销而不需要深入挖掘.(这里有一些关于SO的内容,虽然我首先要搜索它)
但是我可能会建议重新设计你的情况,以便同步实际上只能通过保护普通条件变量的互斥锁完成.
在一些线程模型中(虽然我对现代模型有疑问)需要使用互斥锁来保护条件变量本身(而不是同步的对象)和并发访问.如果条件变量未受互斥锁保护,则可能会遇到条件本身的问题.
| 归档时间: |
|
| 查看次数: |
5502 次 |
| 最近记录: |