具有条件变量的读写器锁

时间:2013-02-22 21:10:28

标签: c++ condition-variable readerwriterlock

我发现boost和tbb库的条件变量都没有使用读写器锁定的接口(即boost中的共享互斥锁)。 condition_variable :: wait()只接受互斥锁。但我认为让它与读写器锁一起工作是相当合理的。任何人都可以告诉我他们不支持这一点的原因,或者为什么人们不这样做?

谢谢, 崔

1 个答案:

答案 0 :(得分:0)

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

如果要使用其他类型的互斥锁,则应使用std::condition_variable_anyboost::condition_variable_any,它们适用于任何类型的互斥锁。除了用户提供的互斥锁之外,由于使用了原生平台类型的内部互斥锁,因此这会产生很小的额外开销。 (我不知道TBB是否提供了同等类型。)

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