5

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

哈希表

Hashtable 是线程安全的,可供多个读取线程和单个写入线程使用。当只有一个线程执行写入(更新)操作时,多线程使用是线程安全的,如果写入器序列化到哈希表,则允许无锁读取。

字典

只要不修改集合,字典就可以同时支持多个阅读器。即便如此,通过集合枚举本质上不是线程安全的过程。在枚举与写访问竞争的极少数情况下,必须在整个枚举期间锁定集合。要允许集合被多个线程访问以进行读写,您必须实现自己的同步。

4

1 回答 1

13

这两个类都允许多个阅读器一次没有锁定,都必须为多个作者锁定。不同之处在于,Hashtable 允许 ONE writer 与多个 reader 一起无需锁定,而 Dictionary 则不安全。因此,对于 Hashtable,只有写入必须被锁定。如果 Keys 和 Values 都是引用类型(因此不需要装箱/拆箱),则在有许多读者和一个(或多个)作者的情况下,Hashtable 可以比 Dictionary 更快,因为读者不必等待锁定全部。使用 Dictionary 相同的场景需要使用ReaderWriterLock

于 2012-04-21T02:00:34.987 回答