字典和Hashtable在线程安全方面的区别

时间:2012-04-21 01:36:57

标签: .net dictionary hashtable

在线程安全方面,HashTable和Dictionary之间有什么区别吗?我没有看到任何......根据msdn,两者的定义如下: -

Hashtable

  

Hashtable是线程安全的,可供多个读取器线程和a使用   单一写作线程。当多线程使用时,它是线程安全的   只有一个线程执行写(更新)操作,其中   允许无锁读取,前提是编写器被序列化   哈希表。

Dictionary

  

字典可以同时支持多个读者,   只要集合没有被修改。即便如此,列举   通过集合本质上不是一个线程安全的过程。在   枚举与写访问争用的罕见情况   必须在整个枚举期间锁定集合。允许的   多个线程可以访问的集合,用于读写   你必须实现自己的同步。

1 个答案:

答案 0 :(得分:9)

这两个类允许多个读取器一次无锁,两个读取器都必须锁定。不同之处在于,Hashtable允许一个作者与多个读者一起使用而不需要锁定,而这对于Dictionary来说是不安全的。因此,对于Hashtable,只能写入锁定。如果键和值都是引用类型(因此不需要装箱/拆箱),在具有许多读者和一个(或多个)写入器的场景中,Hashtable可能比Dictionary更快,因为读者不必等待锁定所有。使用词典时,相同的方案需要使用ReaderWriterLock