使字典访问具有线程安全性?

27

什么是使C#字典访问线程安全的最简单方法?最好只使用lock(object),但欢迎任何其他想法!

1个回答

61

在.NET 4中,您可以使用ConcurrentDictionary类。

如果您需要使用旧版本的.NET,并想自己编写代码:

  • 将一个字典作为私有字段包装在您的类中
  • 使用单独的private object lockObject
  • 在对字典的每次访问周围使用该lockObject上的锁定

2
只是好奇,为什么要“使用单独的锁对象”? - Thus Spoke Nomad
7
@MonoLightTech 提出的问题有些理论性,但如果Dictionary类本身内部的代码或需要“看到”该集合的外部代码也对其进行锁定,可能会导致死锁。应遵循关注点分离原则:lockObject仅用于锁定。请注意,这是一种防止死锁的建议。 - H H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接