Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.NET2.0是否有一个超薄的读写器锁?_.net_Multithreading_Locking - Fatal编程技术网

.NET2.0是否有一个超薄的读写器锁?

.NET2.0是否有一个超薄的读写器锁?,.net,multithreading,locking,.net,Multithreading,Locking,我看过.NET2.0中的ReaderWriterLock和.NET3.5中的ReaderWriterLockSlim,slim版本不使用内核对象进行锁定。对于我的上下文,它可能会生成大量(但不是很大)的对象,这听起来更好 但我编写的代码需要在过渡期内同时在.NET2.0和3.5中使用,因此3.5版本虽然看起来很好,但无法使用 是否有人拥有或知道类似的类,我可以将其插入.NET 2.0并从中获得一些相同的好处?据我所知,Microsoft没有类似的类(否则,ReaderWriterLockSlim

我看过.NET2.0中的ReaderWriterLock和.NET3.5中的ReaderWriterLockSlim,slim版本不使用内核对象进行锁定。对于我的上下文,它可能会生成大量(但不是很大)的对象,这听起来更好

但我编写的代码需要在过渡期内同时在.NET2.0和3.5中使用,因此3.5版本虽然看起来很好,但无法使用


是否有人拥有或知道类似的类,我可以将其插入.NET 2.0并从中获得一些相同的好处?

据我所知,Microsoft没有类似的类(否则,
ReaderWriterLockSlim
会有些无意义)如果你从第三方而不是你信任的第三方找到一个有着优秀头脑的人,他们花了很长时间思考、实施和测试它,我不会相信它。例如,我当然不会信任随机代码项目实现

您是否有任何具体措施建议使用
ReaderWriterLockSlim
会更好,值得为.NET 2.0寻找替代方案?这当然是一个“很好的拥有”,但我怀疑它的巨大意义的情况是相对罕见的。除非您已经知道锁定对您来说是一个瓶颈,否则我将坚持使用您现有的功能,并在您可以升级时做好准备

不过,您可能想尝试只使用普通监视器,而不是
ReaderWriterLock
——在许多情况下,RWL的开销超过了它的好处


当然,这一切都是根据具体情况而定的-你的应用程序可能真的会被
ReaderWriterLockSlim

库中的
ReaderWriterGate
设计得更快,速度更快?

-这个类是根据ReaderWriterLock替代方案设计的,比ReaderWriterLock快20%-30%

我所做的区别是:

  • 通过在读操作中嵌套写锁,支持升级锁 锁。 与ReaderWriterLock不同,升级锁是线程安全的
  • 具有示例集合,向您展示如何设计线程安全 收藏。 它们的效率不如.NET4.0的PFX集合,但它们还有其他好处
  • 如果所有启动的锁都已解锁,则无法死锁。那 所有其他 锁定机制对该锁柜是互斥的
  • 能够检测死锁并关闭死锁检测开销, 一旦您确认死锁不会发生
  • 高度递归,并且多次更加健壮 而不是ReaderWriterLock和ReaderWriterLockSlim

  • 我在这方面花了很多功夫,我希望它会有用。到目前为止,它是非常新的,需要对其他锁定机制进行测试。当然,一切都是.NET 2.0的抱怨。

    我问了一个关于使用
    ReaderWriterLock
    的缺点的问题,有一些有趣的链接包含了
    ReaderWriterLock
    的替代品。看一看。

    我的数据结构是针对服务容器IoC类型的,它们的数据结构中包含实例,这些实例在开始时主要在单个线程上写入,但之后主要在多个线程上读取,所以我希望避免内核对象,只锁定()…我将把锁定代码分离到我自己的类中并使用它,现在只使用排他锁,然后我可以在以后插入更好的锁(如果必要的话)。不幸的是,该类仅适用于请求/响应类型的场景,因为它会立即返回并在获得锁时调用您的代码,而在我的代码中,我需要锁,因为我需要返回访问数据结构的结果。我肯定会看这个,谢谢发布它并让我知道它。