我有这段代码
private object volatile objLock = new object();
void Foo()
{
// doing something
lock(objLock)
{
Monitor.Wait(objLock);
}
// finish up
}
void Bar()
{
lock(objLock)
{
Monitor.Pulse(objLock);
}
}
这两个函数都是作为来自外部设备的事件处理程序触发的,并且将是不同的线程!
我的问题是,当调用Bar()时,它会在lock(objLock)行停止。对我来说,表明objLock已被锁定......
如果我从主应用程序(通过按钮)调用Foo(),那么一切都很完美!
我做错了什么?
我正在使用.NET 3.5
答案 0 :(得分:-2)
这两个函数都是作为来自外部设备的事件处理程序触发的,并且将是我不同的线程!
我认为他们将在同一个线程上调用。有点猜测,但这是他们可以阻止对方的唯一条件。
当Wait()
阻止进一步的事件处理时。