首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >优化的ReaderWriterLock读访问

优化的ReaderWriterLock读访问
EN

Stack Overflow用户
提问于 2009-10-16 15:23:54
回答 2查看 851关注 0票数 1

因此,我的理解是,在ReaderWriterLock (或者更具体地说,ReaderWriterLockSlim )上,读和写都需要获取互斥来获取锁。我想优化锁的读访问,这样如果没有写挂起,就不需要获取锁。(我愿意牺牲写操作的性能,为读操作添加一些约束,使第一次读操作变慢,第二次读变快,等等。如果需要,只要读取的绝大多数都是尽可能快的。)

那么,如何做到这一点,或者更好的是,有没有一个框架或“标准”实现可以向我指出?(或者如果我误解了,但它已经得到了支持,那就太好了!)

因此,对于我的文章:似乎如果一个人有一个读取器/写入器数量的计数器(由Interlocked.Increment保护),这将足以让读取器检查写入器计数是否是非零,并且只在那时获得锁。(如果获取了锁,则在锁中递增。)

写入器总是递增,获取锁,旋转,直到读取器计数变为0(愿意假设读取器总是快速完成,或者甚至在乐观的情况下完全绕过读取器计数),最后递减。(当我们阻塞或可能在一次传递中清除所有挂起的读取器/写入器时,也可以抛出某种形式的优先级,因为我只保护一个值,但我现在放弃这一点。)

所以..。有没有人看到过类似的东西或有什么建议?如果过了一段时间什么都没有了,我很乐意把最初的实现组合在一起,然后更具体地谈谈。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-16 15:33:50

你所描述的,在基本层面上,已经是读取器/写入器锁是如何工作的。它们不需要取出互斥锁,因为读取器/写入器锁通过使用读取器和写入器的内部计数来控制访问(实际上,互斥锁意味着读取器将相互阻塞,而实际上允许多个并发读取器--这就是锁类型的全部意义!)。

所以,是的,有一个框架/标准实现:ReaderWriterLockSlim。我真的怀疑你能写出比这更好的读/写锁。在任何情况下--您确定这个锁是性能问题的根源吗?

票数 3
EN

Stack Overflow用户

发布于 2009-10-16 15:34:55

恐怕你错了,因为ReaderWriterLockSlim是基于自旋锁定的,而不是基于互斥的(你可以在Reflector中看到这一点)。

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

https://stackoverflow.com/questions/1578777

复制
相关文章

相似问题

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