当我有以下代码时,我的问题是调用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);
}
}
signal.WaitOne
对Monitor
的操作没有影响... - Peter RitchieMonitor.Enter(obj)
。 - xanatos