当我有如下所示的代码时,我的问题是如果调用signal.WaitOne的线程释放已获取另一个线程获取锁的锁定?我认为这是一个微不足道的问题,但我试图寻找这样的东西,然后空洞起来。如果有人能够阐明这一点,并修改我的帖子/标题,使其更容易搜索到任何人在未来寻找这个,我会很感激。Do Wait句柄释放线程获取的锁吗?
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'的功能没有影响... –
@PeterRitchie - 感谢您的评论! – Sandman
Hi @PeterRitchie嗨,我已经编辑过未来的参考资料。如果你能批准编辑,我将不胜感激。 – Sandman