小编Jos*_*hua的帖子

澄清C#字典的读写

在本声明的背景下,

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

读写是什么意思?我的理解是,读操作是查找键并提供对其值的引用的操作,而写操作是从字典中添加或删除键值对的操作.但是,关于这一点,我找不到任何结论.

所以最大的问题是,在实现线程安全字典时,更新字典中现有键值的操作是否会被视为读者或作者?我计划让多个线程访问字典中的唯一键并修改它们的值,但线程不会添加/删除新键.

假设修改现有值不是字典上的写操作,显而易见的暗示是我的线程安全字典的实现可以更高效,因为每次我尝试更新时都不需要获得独占锁现有密钥的值.

不能使用.Net 4.0中的ConcurrentDictionary.

c# dictionary thread-safety

11
推荐指数
1
解决办法
3269
查看次数

Index的其他原因超出了.Net字典中数组的范围

我理解在Dictionary对象的边界错误之外的索引的主要原因之一是线程冲突.(同时读取和写入同一个字典)但是,我遇到了一个令人困惑的案例,其中线程冲突不是一个充分的解释.

情况就是这样:我编写的代码以不安全的方式实现了Dictionary,用于多线程处理.

该代码已作为Web服务实现到两个服务器,服务器A和服务器B.服务器通过负载均衡器访问,负载均衡器将以循环方式向服务器A和B发送请求.

现在这里是棘手的部分.该错误仅出现在服务器A上,而不会出现在服务器B上.根据我们的硬件团队,两个服务器都是相同的.尽管线程冲突本质上是一个随机过程,但它仍然应该同等地影响我的两个服务器.我在一台服务器上看到50多个错误实例,在另一台服务器上看到0.从统计上来说,线程冲突只发生在我的一台服务器上而另一台运行时没有错误.

我已经修改了应用程序以使其更安全,但在Dictionary对象的Insert操作中抛出此错误还有什么其他原因?

.net c# dictionary

10
推荐指数
1
解决办法
5665
查看次数

标签 统计

c# ×2

dictionary ×2

.net ×1

thread-safety ×1