gpt4 book ai didi

c# - lock 与 AcquireReader & writer 锁

转载 作者:行者123 更新时间:2023-11-30 21:23:37 26 4
gpt4 key购买 nike

我发现我的应用程序可能会变慢,所以我有两个问题:

  1. 对象上的简单锁定和读取器/写入器锁定之间的真正区别是什么?例如。我有一群客户,变化很快。对于迭代,我应该使用 readerlock 还是简单的锁就足够了?
  2. 为了减少负载,我在没有任何锁定的情况下保留了一个集合的迭代(仅读取)。该集合变化频繁且快速,但项目是通过 writerlocks 添加和删除的。使这个阅读不受锁保护是否安全(我不介意偶尔跳过项目,这个方法在循环中运行并且它并不重要)?我只是不想有随机的异常(exception)。

最佳答案

不,您当前的场景安全。

特别是,如果在迭代时集合发生变化,您将得到 InvalidOperationException。在迭代线程中。您应该在迭代器的整个持续时间内获得读者锁:

  • 获取读者锁
  • 遍历集合
  • 解除读者锁定

请注意,这与为迭代的每个步骤 获取读取器锁不同 - 这无济于事。

至于读/写锁和“普通”锁的区别——读/写锁的思想是多个线程可以同时读,但是只有一个线程可以写(并且只有在没有线程的情况下)在看书)。在某些情况下,这可以提高性能 - 但它也增加了解决方案的复杂性(就正确解决问题而言)。我还建议您使用 ReaderWriterLockSlim如果可能的话,从 .NET 3.5 开始 - 它比原来的效率高得多 ReaderWriterLock , ReaderWriterLock 存在一些固有问题IIRC.

我个人通常使用简单的锁,直到我证明锁争用是性能瓶颈。您是否已分析您的应用程序以找出瓶颈所在?

关于c# - lock 与 AcquireReader & writer 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1656772/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com