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),您应该绝对不会这样做,锁定将被释放.