Tôi có câu hỏi liên quan đến việc sử dụng boost::lock_guard
(hoặc các ổ khóa có phạm vi tương tự) và sử dụng các biến cần khóa bảo vệ trong tuyên bố return
.Cách sử dụng lock_guard khi trả lại dữ liệu được bảo vệ
Làm cách nào để hủy các đối tượng địa phương và sao chép giá trị trả lại? Tối ưu hóa giá trị trả lại ảnh hưởng đến điều này như thế nào?
Ví dụ:
Data Class::GetData()
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
return this->mData;
}
Điều này có thể đúng (nếu mData là biến bảo vệ bởi mMutex)? Hoặc tôi có phải sử dụng phạm vi địa phương và giống như tạm thời được hiển thị trong ví dụ bên dưới:
Data Class::GetData()
{
Data ret;
{
boost::lock_guard<boost::mutex> lock(this->mMutex);
ret = this->mData;
}
return ret;
}