C# 我应该如何阅读WriterLockslim和Dictionary<;MyKeyClass、MyValueClass>;?

C# 我应该如何阅读WriterLockslim和Dictionary<;MyKeyClass、MyValueClass>;?,c#,C#,所以问题是在访问字典时,什么时候应该使用EnterReadLock()和EnterWriteLock() TryGetValue。我认为读锁应该可以 使用索引器更新词典,例如_dic[existingKey]=NewValue。我认为读锁应该可以 使用索引器添加新项目,例如_dic[newKey]=NewValue。我想我需要一个书面记录 提前谢谢 安东已经提到,应该使用WriteLock的insers/updates/deletes和ReadLock的reads 但是你也可以考虑一个升级的锁。

所以问题是在访问字典时,什么时候应该使用EnterReadLock()和EnterWriteLock()

  • TryGetValue。我认为读锁应该可以
  • 使用索引器更新词典,例如_dic[existingKey]=NewValue。我认为读锁应该可以
  • 使用索引器添加新项目,例如_dic[newKey]=NewValue。我想我需要一个书面记录

  • 提前谢谢

    安东已经提到,应该使用WriteLock的insers/updates/deletes和ReadLock的reads

    但是你也可以考虑一个升级的锁。比方说,您在字典中检查ContainsKey()或ContainsValue(),然后决定更新它。UpgradableReadLock允许您高效地升级到WriteLock,而无需释放ReadLock,然后
    重新获取WriteLock

    虽然这不能直接回答您的问题,但请注意,明智的做法是分析使用
    ReaderWriterLockSlim
    的解决方案是否比正常的
    lock
    语句更快(当然,如果您还没有这样做的话)。新的
    ReaderWriterLockSlim
    仍然有很多开销,在许多情况下(读多写少)仍然比简单的
    锁慢。除此之外,使用
    的设计比使用
    ReaderWriterLockSlim
    简单得多