2013-02-22 155 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獲得,但是你必須犧牲一點成績。