我有以下情况:我想相互排除对对象的访问。
到目前为止,我通常会使用锁定对象
object lockObject = new object();
...
method1: lock(lockObject) { CODE1 }
现在我还有一个可以从另一个线程调用的方法。它不应该被阻止未知时间,而是应该在定义的时间内给出答案。
在这种情况下,我会使用监视器,例如
method2:
try{
Monitor.TryEnter(lockObject , 20000, ref lockTaken);
if (lockTaken) {CODE2}
}
catch(...){...}
finally
{
if (lockTaken) Monitor.Exit(timerLock);
}
现在我的问题是:如果lockobject相同并且相互排斥,是否可以以这种方式混合lock和monitor,或者是否需要将每个锁都更改为monitor。
那么同一个令牌是否会被“锁定”,或者监视器会为对象创建另一个令牌然后锁定?
乍一看,我看不到该应用程序同时在两者的代码中运行。但我不知道是否存在任何时序问题,其中 CODE1 和 CODE2 是并行执行的。