当我有如下所示的代码时,我的问题是调用 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);
}
}
不会。锁会一直保持到Exit
叫做。一般来说,持有锁时应该尽量不要阻塞。它增加了陷入僵局的机会。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)