Eric Lippert có số xuất sắc blog post về điều này. Về cơ bản nó hơi vô nghĩa một mình.
Cá nhân tôi không tin tưởng MSDN quá nhiều vào mặt trận này, khi tôi thấy rằng nồi hơi tấm. Nó không luôn luôn có nghĩa là những gì nó nói. Ví dụ, nó nói cùng một điều về Encoding
- mặc dù thực tế rằng tất cả chúng ta sử dụng mã hóa từ nhiều chủ đề trên khắp nơi.
Trừ khi tôi có bất kỳ lý do nào để tin khác (tôi làm với Encoding
) Tôi giả sử rằng tôi có thể gọi bất kỳ thành viên tĩnh nào từ bất kỳ chủ đề nào không tham nhũng trạng thái toàn cầu. Nếu tôi muốn sử dụng dụ thành viên của cùng một đối tượng từ các luồng khác nhau, tôi cho rằng điều đó là ổn nếu tôi đảm bảo - thông qua khóa - chỉ một chuỗi sẽ sử dụng đối tượng tại một thời điểm. (Đó không phải luôn luôn như vậy, tất nhiên. Một số đối tượng có mối quan hệ chủ đề là và chủ động không thích được sử dụng từ nhiều chủ đề, ngay cả khi khóa tại chỗ. Điều khiển giao diện người dùng là ví dụ rõ ràng.)
Tất nhiên, nó trở nên phức tạp nếu các đối tượng được chia sẻ một cách không rõ ràng - nếu tôi có hai đối tượng chia sẻ một tham chiếu đến phần thứ ba, thì tôi có thể sử dụng hai đối tượng đầu tiên độc lập với các luồng khác nhau, với tất cả khóa thích hợp - nhưng vẫn bị hỏng đối tượng thứ ba .
Nếu loại làm quảng cáo chính nó thành chuỗi an toàn, tôi hy vọng nó sẽ cung cấp một số chi tiết về nó.Thật dễ dàng nếu nó không thay đổi được - bạn chỉ có thể sử dụng các cá thể mà bạn thích mà không phải lo lắng về chúng. Đó là một phần hoặc toàn bộ các loại "an toàn chỉ" có thể thay đổi được khi chi tiết quan trọng.
Nguồn
2010-06-29 05:10:15
Ghi chú nhỏ của MS có nghĩa là, "Chúng tôi đã không thực hiện nhiều/khóa bất kỳ trong các phương pháp thể hiện [có thể vì lý do hiệu suất]. Vì vậy, nếu bạn đi và sic một tá chủ đề trên đó, và nó messes lên, don ' t đến khóc với chúng tôi. Nó không phải là một lỗi. Và chúng tôi đã cảnh báo bạn. " – cHao
@cHao: Có * nhiều hơn * để nhận đa luồng hơn là chỉ gắn một khóa trên các phương thức thể hiện. Bạn thường muốn thực hiện một chuỗi * toàn bộ các cuộc gọi phương thức hoạt động một cách nguyên tử - không có số lượng khóa nội bộ nào sẽ giúp ích trong trường hợp đó. Lặp lại thông qua một bộ sưu tập là một ví dụ rõ ràng. –
@Jon: Đồng ý, có rất nhiều thứ khác. Nhưng không có nhiều hơn nữa ở tất cả những gì có thể được mong đợi của MS, như được xây dựng trong atomicity trên nhiều cuộc gọi phương pháp thậm chí không có ý nghĩa từ bất cứ ai giá trị sự ổn định. (Nó yêu cầu tài liệu API có nội dung như "Nếu bạn gọi IsEmpty() và trả về false, bạn PHẢI gọi Remove() hoặc ReleaseLock() để tránh deadlocks".) Và ngay cả trong một phương thức, nó có thể gây ra vấn đề hiệu suất nếu nó được sử dụng không cần thiết. Vì vậy, MS đúng không bận tâm. Đó là quan điểm của tôi. – cHao