在设置锁定时线程关闭时锁定会发生什么

Ale*_*lex 3 c# multithreading locking

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

其他线程是否可以访问关键区域(我的特定锁定变量是否已解锁)或者锁定是否仍然处于活动状态并且会阻止我的应用程序?如果是这样,我有什么解决方案来避免砖?

Dar*_*rov 12

一个声明:

lock (x)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

Monitor.Enter(x);
try 
{
   ...
}
finally 
{
   Monitor.Exit(x);
}
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到是否抛出异常,因为该finally语句释放了锁.因此,即使您使用Thread.Abort终止线程(这会导致线程内部抛出ThreadAbortException),您应该绝对不会这样做,锁定将被释放.