我认为 Monitor.Enter 对对象的引用起作用,只要对对象的引用或对象本身没有改变。
所以这是我的简单案例,我有一个名为 QueueManager 的类,其中有一个 Queue。在操作队列之前,我正在使用此对象 Queue 使用 Monitor.Lock 进行锁定。我尝试了对队列对象调用 Monitor.Lock 的简单测试,但它失败了。知道为什么吗?
public class QueueManager
{
private List<ConversionJob> _jobQueue = new List<ConversionJob>();
public QueueManager()
{
}
public List<ConversionJob> Queue
{ get { return _jobQueue; } }
}
public class Main
{
private QueueManager qMgr = new QueueManager();
public Main()
{
try
{
Monitor.Enter(qMgr.Queue);
throw new Exception();
}
catch (Exception)
{
Monitor.Enter(qMgr.Queue);
}
}
}
这不是死锁!!我不明白为什么它不会死锁。我尝试了这个,因为我怀疑锁被占用了,所以我把这个测试代码放进去,我很惊讶。