Tôi có một lớp học được truy cập từ nhiều chủ đề. Cả hai hàm getter và setter đều được bảo vệ bằng các khóa. Các khóa cho các hàm getter có cần thiết không? Tại sao?hiện một chức năng getter cần một mutex?
class foo {
public:
void setCount (int count) {
boost::lock_guard<boost::mutex> lg(mutex_);
count_ = count;
}
int count() {
boost::lock_guard<boost::mutex> lg(mutex_); // mutex needed?
return count_;
}
private:
boost::mutex mutex_;
int count_;
};
Không nhất thiết. Đọc và viết một 'int' có lẽ là hoạt động nguyên tử. Tất nhiên đây là kiến trúc phụ thuộc và không di động. – Dan
Chính xác - đó là hành vi không xác định. Sẽ tốt hơn nếu bạn có chi phí trên một khóa, thay vì bộ nhớ bị hỏng. –
Thông thường, có.Nhưng nếu bạn có nhu cầu chứng minh để tăng hiệu suất, có thể bỏ qua khóa. Xem câu trả lời của tôi. – Dan