이동 가능한 C 유형의 뮤텍스 처리
개요:
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!