首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ReaderWriterLock vs lock{}

ReaderWriterLock vs lock{}
EN

Stack Overflow用户
提问于 2010-01-22 19:49:01
回答 7查看 43.1K关注 0票数 73

请解释一下主要的区别,以及我应该在什么时候使用什么。

重点关注web多线程应用程序。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-01-22 19:51:01

lock只允许一个线程同时执行代码。ReaderWriterLock可能允许多个线程同时读取或独占访问写入,因此它可能更高效。如果你使用的是.NET 3.5,ReaderWriterLockSlim会更快。因此,如果您的共享资源被读取的次数多于写入的次数,请使用ReaderWriterLockSlim。使用它的一个很好的例子是您经常(在每次请求时)读取的文件,而您很少更新文件的内容。因此,当您从文件读取时,您将进入一个读锁,以便许多请求可以打开它进行读取,而当您决定写入时,您将进入一个写锁。在文件上使用lock基本上意味着您一次可以为一个请求提供服务。

票数 73
EN

Stack Overflow用户

发布于 2010-01-22 19:52:59

如果你有很多线程,只有需要读取数据,并且这些线程在等待锁的时候被阻塞,并且你不经常需要更改数据,那么可以考虑使用。

但是,ReaderWriterLock可能会阻塞等待写入很长时间的线程。

因此,只使用ReaderWriterLock后,你已经确认,你得到了高争用的锁在“现实生活”,你已经确认,你不能重新设计你的锁设计,以减少锁持有的时间为

另外,如果您不能将共享数据存储在数据库中并让它负责所有的锁定,那么如果一个数据库对您的应用程序来说足够快,那么这就不太可能让您很难找到bug。

在某些情况下,您还可以使用Aps.net缓存来处理共享数据,并在数据发生更改时从缓存中删除该项。下一次读取可以在缓存中放入一个新的副本。

记住

“最好的锁定类型是您不需要的锁定(即不在线程之间共享数据)。”

票数 21
EN

Stack Overflow用户

发布于 2010-01-22 19:55:09

监视器和可以与任何引用对象关联的底层“同步块”-C#的lock-support独占执行下的底层机制。只有一个线程可以拥有锁。这是简单而有效的。

ReaderWriterLock (或者,在V3.5中,更好的ReaderWriterLockSlim)提供了更复杂的模型。避免这样做,除非你知道它会更有效率(例如,有性能测量来支持你自己)。

最好的锁定类型是您不需要的锁定(即不在线程之间共享数据)。

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

https://stackoverflow.com/questions/2116957

复制
相关文章

相似问题

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