我想检查以下代码是否可以抵抗 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();
  }
}

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

我正在使用 .NET 4.0

Debug 和 Release 中的行为有什么区别吗?

最佳答案

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

这个问题没有好的通用解决方案。这就是为什么 Eric Lippert(以及其他人)说 Locks and exceptions do not mix

您专门询问 ThreadAbortException ,这让我相信您正在考虑使用 Thread.Abort 在您的应用程序中进行某种线程控制。我敦促你重新考虑。如果你想要取消你的线程的能力,你应该使用 Cancellation 或类似的东西。在最可怕的情况下使用 Thread.Abort 是一个非常糟糕的主意。它当然不应该成为您程序整体设计的一部分。

关于c# - ReaderWriterLockSlim 是否能抵抗 ThreadAbortException?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22821549/

10-12 01:56