c# - 设置锁时线程关闭时锁会发生什么

标签 c# multithreading locking

我想知道,如果在一个线程中我有一个锁定语句,并且如果在设置锁时关闭了该特定线程,那么锁会发生什么?

其他线程是否可以访问关键区域(我的特定锁变量是否已解锁)或锁是否保持事件状态并使我的应用变砖?如果是这样,我必须采取什么解决方案来避免变砖?

最佳答案

A lock声明:

lock (x)
{
    ...
}

由编译器在生成的 IL 中解释为:

Monitor.Enter(x);
try 
{
   ...
}
finally 
{
   Monitor.Exit(x);
}

所以你可以看到如果抛出异常,锁会因为 finally 语句而被释放。因此,即使您使用 Thread.Abort 终止线程(这会导致 ThreadAbortException 被抛入线程内)你应该绝对不要这样做,锁将被释放。

关于c# - 设置锁时线程关闭时锁会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239804/

相关文章:

Python:具有无限循环的控制台,超出堆栈空间

multithreading - 信号处理程序运行时的线程状态

java - 当相应的 Stream 关​​闭时,Java FileChannel 锁是否关闭,或者我是否必须显式关闭它们?

c# - 如何调用具有多个参数的测试方法(NUnit)

java - 如果 Activity/UI 空闲一段时间(可能很长),UI 线程会做什么

c# - Threading.Monitor - 多个锁定对象与 PulseAll - 哪个资源效率更高?

svn - 最好的锁定版本控制系统是什么?

c# - 在 CPU 绑定(bind)任务上使用 await 关键字与 Task.Wait() 方法有什么区别?

c# - 使用构造函数参数 Ninject Get<T>

c# - 动态设置 DllImport 属性