如何检查当前代码是否在“内部”锁定?

问题描述:

我有一些代码可以从锁外部的内部调用。我需要在锁内做些事情。代码本身不知道它从哪里被调用。所以,我需要这样的:如何检查当前代码是否在“内部”锁定?

lock (MyLock) { 
    if (INSIDE_LOCK) ... 
} 

我知道这听起来很奇怪和错误,但我需要这个兼容性问题。否则,我将不得不重写很多代码,由于我没有测试,所以这会很危险。

尝试Monitor类:

if (Monitor.IsEntered(MyLock)) {...} 

由于(见勒内·沃格特下面的评论)lock

lock(MyLock) { 
    ... 
} 

,其实对于

Monitor.Enter(MyLock); 

try { 
    ... 
} 
finally { 
    Monitor.Leave(MyLock); 
} 
+4

一些解释关于'锁语法糖(MyLock)'只是'Monitor.Enter(MyLock)'+'try/finally'的语法糖+ + Monitor.Leave(M yLock)''可以改进这个单线答案。 –