【问题标题】:Is there a safe way to use ReaderWriterLockSlim within ASP.NET?有没有在 ASP.NET 中使用 ReaderWriterLockSlim 的安全方法?
【发布时间】:2009-09-21 14:58:48
【问题描述】:

Joe Duffy 关于ReaderWriterLockSlim 的文章让我没有信心!

Introducing the new ReaderWriterLockSlim in Orcas

锁对异步异常(例如线程中止和内存不足)不可靠。如果其中一种发生在锁的方法之一的中间,锁状态可能会被破坏,导致后续的死锁、未处理的异常,并且(可悲的是)由于内部使用自旋锁,导致 100% 的 CPU 挂钩。

如何在 ASP.NET 中安全地使用 ReaderWriterLockSlim?

【问题讨论】:

  • 把锁释放代码放在finally块中,不用担心。

标签: asp.net readerwriterlockslim


【解决方案1】:

您的 ASP.NET 应用程序是否经常遇到线程中止(来自其他线程)或试图生存OutOfMemoryExceptions?如果不是,我看不出这个帖子太令人担忧了......如果它,我认为你有更大的问题。

特别要注意这一点:

然而,新锁有一些缺点,可能会导致程序员编写托管 或低级可靠性敏感代码等待采用它。 不要误会我的意思,大多数人真的不需要担心这些话题,所以我 如果我的警告把你吓跑了,请道歉:但那些确实需要 讲述了事态。

现在是的,ASP.NET 是“托管”的,但它不像 SQL Server CLR 托管那么严重。我认为你不必担心。

【讨论】:

  • 我明白这一点,但问题是在敏感点中止一次会导致我的整个应用程序死锁——例如永远不会释放写锁。我的网站流量不高,但一想到百万分之一的死机仍然让我毛骨悚然。
  • 我正在研究使用这里描述的方法nobletech.co.uk/Articles/ReaderWriterLockMgr.aspx
  • @Andrew:如果我正确理解 Joe 的帖子,那篇文章不会解决问题。我相信如果在 锁定方法调用期间抛出异步异常可能是一个问题。但是,如果您的网站编码如此完美,以至于这种“百万分之一”的死锁(而且它可能比这小得多)最终成为您最大的风险,我会感到惊讶。跨度>
  • 顺便说一句,如果这不是一个高流量的网站 - 您是否真的对其进行了分析并检查了“正常”锁定是否过于昂贵?如果没有确切的数字表明更简单的完全互斥政策是有问题的,我不会开始冒险进入读者/作者领域。
  • 感谢富有洞察力的 cmets Jon。我将密切关注性能(使用我正在使用此代码开发的库的各个站点)。
猜你喜欢
  • 2023-04-08
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2012-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多