Có cần thiết để bảo vệ quyền truy cập vào một biến duy nhất của loại tham chiếu trong ứng dụng đa luồng không? Tôi hiện đang khóa biến đó như sau:Khóa có cần thiết trong tình huống này không?
private readonly object _lock = new object();
private MyType _value;
public MyType Value
{
get { lock (_lock) return _value; }
set { lock (_lock) _value = value; }
}
Nhưng tôi tự hỏi điều này có thực sự cần thiết không? Không được gán giá trị cho một trường nguyên tử? Bất cứ điều gì có thể đi sai nếu tôi không khóa trong trường hợp này?
P.S .: MyType là một lớp không thay đổi: tất cả các trường được đặt trong hàm tạo và không thay đổi. Để thay đổi một cái gì đó, một cá thể mới được tạo và gán cho biến trên.
Giả sử tôi hỏi bạn "có phải là khóa trên cánh cửa cần thiết không?" Bạn cũng có thể đáp ứng bằng cách lưu ý rằng tôi đã không mô tả cánh cửa hoặc nhiệm vụ cánh cửa được thiết kế để thực hiện. Một khóa là cần thiết trên một cánh cửa nếu nhiệm vụ mà cánh cửa được phát minh ra để thực hiện không thể đạt được mà không cần thêm một khóa. Không ai có thể cho bạn biết công việc mà biến của bạn được thiết kế cho có thể đạt được mà không có khóa trừ khi bạn nói cho họ biết nhiệm vụ đó là gì. Đưa ra một giải thích * chi tiết và đầy đủ * của mọi kịch bản luồng có thể * mà biến có thể được sử dụng và ngữ nghĩa bạn muốn xảy ra trong mỗi ngữ cảnh. –