C에서 이동 가능한 유형의 뮤텍스 처리
문제:
std::mutex의 복사 가능 및 이동 불가능 특성, 뮤텍스를 보유하는 클래스 기본 이동 생성자가 부족하여 이동 가능한 스레드로부터 안전한 유형을 생성하기가 어렵습니다.
해결책:
뮤텍스를 보유하는 클래스 A에 대한 스레드로부터 안전한 이동 의미 체계를 달성하려면, 다음 전략을 채택하십시오:
이동 생성자:
A(A&& a) { WriteLock rhs_lk(a.mut_); // Lock the rhs mutex field1_ = std::move(a.field1_); // Move the data 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_); // Lock the rhs mutex for reading field1_ = a.field1_; // Copy the data 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; }
기타 고려 사항:
위 내용은 Mutex를 이동 가능하고 스레드로부터 안전한 C 클래스로 만들려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!