字典和哈希表在线程安全方面的区别



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

哈希表

哈希表是线程安全的,可供多个读取器线程和 单个写入线程。在以下情况下,多线程使用是线程安全的 只有一个线程执行写入(更新)操作,这些操作 允许无锁读取,前提是编写器被序列化为 哈希表。

字典

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

这两个类都允许多个读取器同时进行锁定,并且必须为多个写入器锁定这两个读取器。不同之处在于,哈希表允许一个写入器与多个读取器一起而不锁定,而这对于字典来说并不安全。因此,使用哈希表时,必须锁定写入。如果键和值都是引用类型(因此不需要装箱/取消装箱),则在具有许多读取器和一个(或多个)编写器的方案中,哈希表可能比字典更快,因为读取器根本不需要等待锁定。对于字典,相同的场景需要使用ReaderWriterLock。

最新更新