2010-01-21 6 views
6

Có bất kỳ triển khai nào có sẵn của một Hashtable cung cấp an toàn luồng với khóa tối thiểu trong .NET không? Hoặc bằng ngôn ngữ khác có thể được chuyển sang .NET?Có thể bắt đầu bằng chuỗi khóa an toàn tối thiểu?

Chúng tôi đang tìm kiếm điều gì đó ở giữa sử dụng từ điển BCL <,> lớp có khóa() và ứng dụng bộ nhớ đệm được phân phối như memcached hoặc Velocity.

Mục đích sử dụng là dành cho bộ nhớ cache với hàng nghìn người đọc đọc các giá trị bất biến dựa trên khóa (số hoặc số, chúng tôi chưa quyết định điều gì). Sẽ có ít nhà văn hơn, có thể chỉ có một.

+0

Vui lòng xác định ý bạn là "an toàn chỉ". cf. http://blogs.msdn.com/ericlippert/archive/2009/10/19/what-is-this-thing-you-call-thread-safe.aspx – jason

+0

Cũng có thể hữu ích khi mô tả kịch bản sử dụng của bạn. Bạn sẽ được trộn chèn/tra cứu/loại bỏ hoặc họ sẽ được nhóm lại với nhau bằng cách nào đó? Tất cả các hoạt động sẽ được truy cập từ nhiều luồng hay chỉ một số luồng nhất định? – Dolphin

Trả lời

4

Bắt đầu từ .Net 4.0 có ConcurrentDictionary. Đây là cấu trúc kiểu có thể bắt đầu có nghĩa là sử dụng hiệu suất cao giữa nhiều luồng.

chi tiết về việc sử dụng và thực hiện nó có thể được tìm thấy ở đây:

+0

Điều đó có vẻ như không thể lập chỉ mục bằng khóa; tức là, không có cách nào "O (1)" để có được giá trị được khóa cụ thể. 'ConcurrentBag' có vẻ hữu ích hơn cho các kịch bản của nhà sản xuất/người tiêu dùng. Có lẽ bạn có nghĩa là 'ConcurrentDictionary ' (http://msdn.microsoft.com/en-us/library/dd287191 (VS.100).aspx)? – jason

+0

Chắc chắn bạn có nghĩa là ConcurrentDictionary? http://msdn.microsoft.com/en-us/library/dd287191(VS.100).aspx –

+0

@Jason, @Michael cảm ơn, vâng tôi có nghĩa là ConcurrentDictionary. Lý do tốt nhất của tôi là sớm và tôi đang trên SO trước khi uống cà phê. – JaredPar

1

Trong What's the best way of implementing a thread-safe Dictionary? Brian Rudolf chia sẻ một liên kết đến một cuốn từ điển thread-safe có sử dụng ReaderWriterLockSlim: http://devplanet.com/blogs/brianr/archive/2008/09/26/thread-safe-dictionary-in-net.aspx.

Bạn cũng có thể xem Đồng bộ hóa hàm băm: http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx.

+0

Từ điển dựa trên ReaderWriterLockSlim trông giống như những gì tôi yêu cầu - khóa hiệu quả hơn. Liên kết trực tiếp: http://devplanet.com/blogs/brianr/archive/2008/09/26/thread-safe-dictionary-in-net.aspx Hashtable được đồng bộ hóa chính xác là những gì tôi đang cố tránh, đơn giản lock() trên tất cả các truy cập. –

+0

Bạn có đang sử dụng hoặc đợi .Net 4 ConcurrentDictionary? –