0

I find neither boost nor tbb library's condition variable has the interface of working with reader-writer lock (ie. shared mutex in boost). condition_variable::wait() only accepts mutex lock. But I think it's quite reasonable to have it work with reader-writer lock. Can anyone tell me the reason why they don't support that, or why people don't do that?

Thanks, Cui

4

1 回答 1

0

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

如果您想使用其他类型的互斥锁,您应该使用std::condition_variable_anyor boost::condition_variable_any,它适用于任何类型的互斥锁。由于除了用户提供的互斥锁之外,还使用了本机平台类型的内部互斥锁,因此这会产生少量额外开销。(我不知道 TBB 是否提供等效类型。)

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

于 2013-02-22T21:19:15.183 回答