處理可移動C 類型中的互斥體
概述:
概述:在中,移動語義增強透過允許在不複製的情況下有效地移動類型來提高效率。但是,標準互斥體 (std::mutex) 既不可移動也不可複製,這對實現利用互斥體的支援移動的類型構成了挑戰。
問題:如何使包含互斥鎖的類別(A) 在線程安全中可移動
解決方案:要啟用可移動性,請將鎖定類型(ReadLock 和WriteLock)定義為共享鎖或唯一鎖的別名。利用這些類型來保護與移動相關的操作中的成員存取。
A(A&& a) { WriteLock rhs_lk(a.mut_); field1_ = std::move(a.field1_); field2_ = std::move(a.field2_); }
移動建構子:
A& operator=(A&& a) { if (this != &a) { WriteLock lhs_lk(mut_, std::defer_lock); WriteLock rhs_lk(a.mut_, std::defer_lock); std::lock(lhs_lk, rhs_lk); field1_ = std::move(a.field1_); field2_ = std::move(a.field2_); } return *this; }
移動賦值運算子:
A(const A& a) { ReadLock rhs_lk(a.mut_); field1_ = a.field1_; field2_ = a.field2_; }
複製建構子:
A& operator=(const A& a) { if (this != &a) { WriteLock lhs_lk(mut_, std::defer_lock); ReadLock rhs_lk(a.mut_, std::defer_lock); std::lock(lhs_lk, rhs_lk); field1_ = a.field1_; field2_ = a.field2_; } return *this; }
複製賦值運算子:
以上是如何安全地移動包含'std::mutex”的 C 類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!