gpt4 book ai didi

c# - Wait Handles 是否释放线程获取的锁?

转载 作者:行者123 更新时间:2023-11-30 16:16:28 25 4
gpt4 key购买 nike

当我有如下所示的代码时,我的问题是调用 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 被调用。一般情况下,尽量不要在持有锁的情况下阻塞。它增加了死锁的机会。

关于c# - Wait Handles 是否释放线程获取的锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18276944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com