Có, đó là chỉ an toàn và có nó tránh bạn sử dụng ổ khóa trên khắp nơi (bất kể điều đó có nghĩa là gì). Tất nhiên điều đó sẽ chỉ cung cấp cho bạn một chủ đề an toàn truy cập vào dữ liệu được lưu trữ trong từ điển này, nhưng nếu bản thân dữ liệu không phải là chủ đề an toàn thì bạn cần phải đồng bộ hóa quyền truy cập vào nó tất nhiên. Hãy tưởng tượng ví dụ rằng bạn đã lưu trữ trong bộ nhớ cache này là List<T>
. Bây giờ thread1 lấy danh sách này (trong một thread an toàn như là từ điển đồng thời đảm bảo cho bạn điều này) và sau đó bắt đầu liệt kê trong danh sách này. Tại chính xác cùng một thời gian thread2 lấy danh sách rất giống nhau này từ bộ nhớ cache (trong một chủ đề an toàn như từ điển đồng thời đảm bảo với bạn điều này) và ghi vào danh sách (ví dụ nó thêm một giá trị). Kết luận: nếu bạn chưa đồng bộ hóa thread1 nó sẽ gặp rắc rối.
Theo như sử dụng nó như là một bộ nhớ cache là có liên quan, tốt, đó có lẽ không phải là một ý tưởng tốt. Đối với bộ nhớ đệm tôi sẽ khuyên bạn nên những gì đã được xây dựng trong khuôn khổ. Ví dụ như các lớp chẳng hạn như MemoryCache. Lý do cho điều này là những gì được xây dựng trong assembly System.Runtime.Caching
, được xây dựng một cách rõ ràng cho bộ nhớ đệm => nó xử lý những thứ như tự động hết hạn dữ liệu nếu bạn bắt đầu chạy bộ nhớ thấp, gọi lại cho các mục hết hạn bộ nhớ cache và thậm chí bạn sẽ có thể phân phối bộ nhớ cache của bạn trên nhiều máy chủ bằng cách sử dụng những thứ như memcached, AppFabric, ..., tất cả những thứ bạn không thể mơ ước với một từ điển đồng thời.
Nguồn
2011-07-18 20:45:25
Lớp lớp MemoryCache có an toàn như ConcurrentDictionary không? – michael
@michael, vâng, đó là chủ đề an toàn nhưng hoàn toàn nhận xét giống nhau là đúng về việc đồng bộ hóa quyền truy cập vào các đối tượng không an toàn mà bạn có thể lưu trữ trong bộ nhớ cache này. –
Ồ, tôi hiểu phần đó. Nhưng, chỉ để những người đọc khác có thể hiểu tôi sẽ nhắc lại nó. Bạn đang nói rằng cả hai lớp 'ConcurrentDictionary' và 'MemoryCache' đều an toàn với luồng, nhưng nội dung bên trong không được bảo đảm là an toàn luồng. :) – michael