ReaderWriterLockSlim 是否能够抵抗 ThreadAbortException?

use*_*375 5 .net c# readerwriterlockslim threadabortexception

我想检查以下代码是否能够抵抗 ThreadAbortException 并且不会导致孤儿锁。如果不是,那么避免孤儿锁的最佳模式是什么?

ReaderWriterLockSlim _lock = new ReaderWriterLockSlim();

public void DoStaff()
{
  _lock.EnterWriteLock();
  //Is this place where ThreadAbotException can corrupt my code, or is there JIT optimalization which prevent this from happening??? 
  try
  {
    ...
  }
  finally
  {
    _lock.ExitWriteLock();
  }
}
Run Code Online (Sandbox Code Playgroud)

根据以下链接http://chabster.blogspot.cz/2013/07/a-story-of-orphaned-readerwriterlockslim.html,有(或至少有)可能的方法如何创建孤儿锁,但我正在运行示例编码了一段时间,没有任何运气。

我正在使用.NET 4.0

调试和发布中的行为有什么区别吗?

Jim*_*hel 4

是的,ThreadAbortException可能会发生在那里,在这种情况下try不会输入,因此您永远不会退出写锁。

这个问题没有好的通用解决方案。这就是为什么 Eric Lippert(以及其他人)说锁和异常不能混合

您具体询问的是ThreadAbortException,这让我相信您正在考虑Thread.Abort在应用程序中使用某种线程控制。我敦促你重新考虑。如果您希望能够取消线程,则应该使用取消或类似的功能。Thread.Abort除了最可怕的情况之外,在任何其他情况下使用都是一个非常糟糕的主意。它当然不应该成为程序整体设计的一部分。