我无法理解在代码中使用lock()
语句的方式。我有几个静态集合像这样:何时使用并发锁定语句
private static Dictionary<string, User>() Users = new Dictionary<string, User>();
我不断地添加,删除,更新和读取此集合。我意识到,当我添加,删除或更新时,我应该锁定Users
,但是当我从集合中读取时,是否必须锁定它?什么是正确的方式来做一些事情,如搜索一个密钥并返回字典中的User
?我正在考虑创建一个新的Dictionary
实例,然后将用户复制到该实例并从中读取,或者我可以直接从中读取它?
不是ReaderWriterLoc(Slim)对于像添加/删除/读取字典这样的简单操作的锁定时间的矫枉过正? –
@DirkBonné它完全依赖 - 它通常是最合适的机制(尽管在.NET 4中,我只是使用ConcurrentDictionary)。如果你有很多读者,但偶尔会有重叠的作者,这会比锁好,因为锁会阻止并发读取。 –