当我有如下所示的代码时,我的问题是调用 signal.WaitOne 的线程是否释放为另一个线程获取锁而获取的锁?我认为这是一个微不足道的问题,但我尝试搜索类似的内容,但结果是空的。如果有人可以对此有所了解并修改我的帖子/标题以使其更容易被将来寻找此内容的任何人搜索,我将不胜感激。
AutoResetEvent signal = new AutoResetEvent(false);
foo() {
Monitor.Enter(locker);
try {
// code
if(condition)
signal.WaitOne();
// code
} finally {
Monitor.Exit(locker);
}
}
编辑:我正在进行此编辑以供将来参考:
对于我正在尝试做的事情来说,这似乎是一个更好的范例:
foo() {
Monitor.Enter(locker);
try {
// code
while(condition)
Monitor.Wait(locker);
// code
} finally {
Monitor.Exit(locker);
}
}
bar {
lock(locker) {
Monitor.Pulse(locker);
}
}