如何检查当前代码是否"内部"锁定?

Hug*_*ota 8 c#

我有一些代码可以从锁内部外部调用.在锁内时我需要做东西.代码本身不知道从哪里调用它.所以,我需要这样的东西:

lock (MyLock) {
    if (INSIDE_LOCK) ...
}
Run Code Online (Sandbox Code Playgroud)

我知道这听起来很奇怪和错误,但我需要这个兼容性问题.否则我将不得不重写很多代码,因为我没有测试会有风险.

Dmi*_*nko 7

尝试Monitor上课:

 if (Monitor.IsEntered(MyLock)) {...}
Run Code Online (Sandbox Code Playgroud)

从那以后(见下面的RenéVogt评论) lock

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

实际上是一种语法糖

 Monitor.Enter(MyLock);

 try {
   ... 
 }  
 finally {
   Monitor.Leave(MyLock);
 } 
Run Code Online (Sandbox Code Playgroud)

  • 关于`lock(MyLock)`的一些解释只是`Monitor.Enter(MyLock)`+`try/finally` +`Monitor.Leave(MyLock)`的语法糖可以改善这个单行答案. (4认同)