爲什麼condition_variable
不是MoveConstructible(按照http://en.cppreference.com/w/cpp/thread/condition_variable)?這禁止包含在大量移動東西的容器中(例如std::unordered_map
)。爲什麼一個condition_variable不是MoveAssignable
這迫使人們使用一個unique_ptr
這引起了一個額外的堆分配,其中像make_shared
這樣的東西是建立來解決。此外,如果沒有池分配器,這可能變得非常低效。
可能讓線程安全太麻煩。您不希望在移動變量期間發生通知。 – NathanOliver
@NathanOliver反正'condition_variable'線程的接口中的所有函數都不安全嗎?我只是想着爲什麼這應該是一個問題 – Curious
我認爲這只是沒有任何意義。考慮一個條件變量處於等待狀態並且另一個線程複製它的情況。複製的條件變量的狀態應該是什麼?如果你說它應該像它的默認構建狀態那麼再次複製真的沒有意義。此外,它取決於是否允許在不調用UB的情況下複製本地條件變量結構(用於'std :: condition_variable')是否允許複製'pthread_cond_t'。 – Arunmu