Tôi đang lập kế hoạch tạo danh sách một lần trong một hàm dựng tĩnh và sau đó có nhiều phiên bản của lớp đó đọc nó (và liệt kê qua nó) đồng thời mà không thực hiện bất kỳ khóa nào.An toàn chủ đề của C# Danh sách <T> cho người đọc
Trong bài viết này http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx MS mô tả các vấn đề an toàn chủ đề như sau:
tĩnh công cộng (chung trong Visual Basic) thành viên của loại này là chủ đề an toàn. Bất kỳ thành viên nào không phải là được đảm bảo là chuỗi an toàn.
Danh sách có thể hỗ trợ nhiều độc giả đồng thời, miễn là bộ sưu tập không được sửa đổi. Liệt kê thông qua một bộ sưu tập là về bản chất không phải là thủ tục an toàn thread . Trong trường hợp hiếm hoi khi một số đếm cạnh tranh với một hoặc nhiều hơn quyền truy cập ghi, cách duy nhất để đảm bảo an toàn chủ đề là khóa bộ sưu tập trong toàn bộ số liệt kê. Để cho phép bộ sưu tập được truy cập bằng nhiều luồng cho việc đọc và viết , bạn phải triển khai đồng bộ hóa của riêng mình.
"Việc đếm qua bộ sưu tập thực chất không phải là quy trình an toàn chỉ." Tuyên bố là điều khiến tôi lo lắng.
Điều này có nghĩa rằng đó là chủ đề an toàn cho độc giả chỉ có kịch bản, nhưng miễn là bạn không sử dụng điều tra?
Hoặc có an toàn cho kịch bản của tôi không?
Cảm ơn câu trả lời. Tại sao tôi cần sử dụng AsReadOnly nếu nó hoạt động khi có hoặc không có nó?
Bởi 'không chia sẻ IEnumerators qua chủ đề' bạn có nghĩa là 'không truy cập ** cùng một điều tra dụ ** từ nhiều chủ đề'? –
@EugeneBeresovksy: Chính xác. – SLaks