我该如何检测对象是否已被锁定?
Monitor.TryEnter
(在这里有描述)不能用于我的情况,因为如果对象未被锁定,则会锁定该对象。
我仅想检查对象是否锁定,而在代码的其他地方我将使用Monitor
类来锁定该对象。
我知道可以使用布尔字段(例如 private bool ObjectIsLocked
),但我想使用锁定对象本身来检测它。
下面的示例代码显示了我的需求:
private static object myLockObject = new object();
private void SampleMethod()
{
if(myLockObject /*is not locked*/) // First check without locking it
{
...
// The object will be locked some later in the code
if(!Monitor.TryEnter(myLockObject)) return;
try
{
....
}
catch(){...}
finally
{
Monitor.Exit(myLockObject);
}
}
}
if(myLockObject /*is not locked*/)
后立即被其他线程锁定,那么这不会成为一个问题吗? - defaultfalse
(或true
,你可以选择)。 - Damien_The_UnbelieverMonitor.IsEntered
,这表明可以检测对象是否已锁定。此外,如果对象被锁定,其他线程肯定可以检测到,否则锁定架构根本无法工作。如果其他线程无法检测对象是否已锁定,则会忽略锁定。 - hwcverwe