如何检查当前代码是否在“内部”锁定?
问题描述:
我有一些代码可以从锁外部的或内部调用。我需要在锁内做些事情。代码本身不知道它从哪里被调用。所以,我需要这样的:如何检查当前代码是否在“内部”锁定?
lock (MyLock) {
if (INSIDE_LOCK) ...
}
我知道这听起来很奇怪和错误,但我需要这个兼容性问题。否则,我将不得不重写很多代码,由于我没有测试,所以这会很危险。
答
尝试Monitor
类:
if (Monitor.IsEntered(MyLock)) {...}
由于(见勒内·沃格特下面的评论)lock
lock(MyLock) {
...
}
,其实对于
Monitor.Enter(MyLock);
try {
...
}
finally {
Monitor.Leave(MyLock);
}
一些解释关于'锁语法糖(MyLock)'只是'Monitor.Enter(MyLock)'+'try/finally'的语法糖+ + Monitor.Leave(M yLock)''可以改进这个单线答案。 –