2013-02-22 62 views
0

我发现既没有boost也没有tbb库的条件变量具有与读写器锁定(即boost中的共享互斥锁)工作接口。 condition_variable :: wait()只接受互斥锁。但是我认为让它在读写器锁定下工作是相当合理的。谁能告诉我为什么他们不支持这个原因,或者为什么人们不这样做?条件变量的读写器锁定

感谢, 崔

回答

0

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

如果你想使用其他类型的互斥锁,你应该使用std::condition_variable_anyboost::condition_variable_any,它适用于任何类型的互斥锁。由于除了用户提供的互斥体之外,还使用本地平台类型的内部互斥体,因此这会带来额外的额外开销。 (我不知道TBB是否提供同等类型。)

这是一个设计权衡,可以提供性能或灵活性。如果你想获得最高性能,你可以使用condition_variable,但只能使用简单的互斥锁。如果你想要更多的灵活性,你可以通过condition_variable_any获得,但是你必须牺牲一点成绩。