具有条件变量的读写器锁
Reader-writer lock with condition variable
我发现boost和tbb库的条件变量都没有使用读写器锁(即boost中的共享互斥锁)的接口。condition_variable::wait()只接受互斥锁。但我认为让它与读者-作家锁合作是非常合理的。有人能告诉我他们不支持这一点的原因吗?或者人们为什么不这么做?
谢谢,Cui
底层平台的本机线程API可能无法轻松支持它。例如,在以pthread_cond_t
实现条件变量的POSIX平台上,它只能与pthread_mutex_t
一起使用。为了获得最大的性能,基本条件变量类型是对本机类型的轻量级包装,没有额外的开销。
如果你想使用其他类型的互斥,你应该使用std::condition_variable_any
或boost::condition_variable_any
,它们可以与任何类型的互斥一起工作。由于除了用户提供的互斥之外,还使用了本机平台类型的内部互斥,因此这会带来较小的额外开销。(我不知道TBB是否提供同等类型。)
这是一种设计权衡,既允许性能,也允许灵活性。如果您想要获得最大性能,可以使用condition_variable
,但只能使用简单的互斥。如果您想要更大的灵活性,可以使用condition_variable_any
实现,但必须牺牲一点性能。
相关文章:
- 用C++快速读写文件
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 在一个读写器队列中,我可以用volatile替换原子吗
- 如何调试读写器锁的死锁?
- 如何使用单个解锁方法(可称为读取器或写入器)实现C++读写器锁?
- 如何用cpp程序读写EC(嵌入式控制器)寄存器
- 快速且无锁的单写器、多读器
- MVCC实现中的无锁定读写器同步
- 单读多写器,带pthreads和锁,不带boost
- 对 std::atomic 变量的更改(读/写)如何在线程之间传播
- Q_PROPERTY参数化读写访问器
- C++-全局变量与局部变量的读/写速度
- boost::shared_mutex多读写器互斥
- 多读写器类的线程安全性
- 读/写void*变量的单个字节
- 重构来自/到一个数据成员的读写访问器
- 读写迭代器- c++
- 具有条件变量的读写器锁
- 在IF语句中读写变量
- 是否寄存器读/写需要临界区保护