首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lock vs AcquireReader & writer锁

lock vs AcquireReader & writer锁
EN

Stack Overflow用户
提问于 2009-11-01 09:57:26
回答 1查看 260关注 0票数 2

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

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-11-01 10:05:26

不,你现在的情况不安全。

特别是,如果一个集合在迭代过程中发生了变化,那么您将在迭代线程中得到一个InvalidOperationException。您应该在迭代器的整个过程中获得一个读取器锁:

在collection

  • Release读取器锁

上迭代

  • 获取读取器锁

注意,这与获得迭代的每一步的读取器锁是不一样的--这不会有帮助。

至于读取器/写入器锁和“普通”锁之间的区别--读取器/写入器锁的思想是多个线程可以同时读取,但只有一个线程可以写入(而且只有当没有人正在读取时)。在某些情况下,这可以提高性能--但它也增加了解决方案的复杂性(从正确的角度来看)。如果可能的话,我还建议您使用.NET 3.5中的.NET--它比最初的ReaderWriterLock要高效得多,并且ReaderWriterLock IIRC存在一些固有的问题。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1656772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档