C#锁定在锁定块中重新分配的对象

The*_*hos 4 c# multithreading locking

我在一个类中有这个代码:

private static MyObject _locker = new MyObject();

...

lock (_locker)
{
     ...
     _locker = new MyObject();
     ...
}
Run Code Online (Sandbox Code Playgroud)

它会锁定_locker吗?

Joã*_*elo 7

不,它不会.从C#规范(重点是我的):

形式的锁定语句,lock (x) ...其中x是引用类型的表达式,精确等效于

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

除了x只评估一次.

由于x没有重新评估锁定将被释放.