具有条件变量的读写器锁

Reader-writer lock with condition variable

本文关键字:读写器 变量 有条件      更新时间:2023-10-16

我发现boost和tbb库的条件变量都没有使用读写器锁(即boost中的共享互斥锁)的接口。condition_variable::wait()只接受互斥锁。但我认为让它与读者-作家锁合作是非常合理的。有人能告诉我他们不支持这一点的原因吗?或者人们为什么不这么做?

谢谢,Cui

底层平台的本机线程API可能无法轻松支持它。例如,在以pthread_cond_t实现条件变量的POSIX平台上,它只能与pthread_mutex_t一起使用。为了获得最大的性能,基本条件变量类型是对本机类型的轻量级包装,没有额外的开销。

如果你想使用其他类型的互斥,你应该使用std::condition_variable_anyboost::condition_variable_any,它们可以与任何类型的互斥一起工作。由于除了用户提供的互斥之外,还使用了本机平台类型的内部互斥,因此这会带来较小的额外开销。(我不知道TBB是否提供同等类型。)

这是一种设计权衡,既允许性能,也允许灵活性。如果您想要获得最大性能,可以使用condition_variable,但只能使用简单的互斥。如果您想要更大的灵活性,可以使用condition_variable_any实现,但必须牺牲一点性能。