gpt4 book ai didi

c# - monitor.wait 是否向其他线程发出信号

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

我正在为 Windows Phone 7 开发应用程序。现在我有 2 个线程。

线程 1

 lock(somelock)
{
//does some work
Monitor.Wait();
//Does some work
}

线程 2

 lock(somelock)
{
//does some work
Monitor.Signal();
//does some work;
}

现在我想知道 Monitor.wait() 是否向另一个线程发出信号。

最佳答案

未能获取锁的线程被保留在就绪队列中。如果拥有锁的线程调用Wait,那么它会产生锁并且就绪队列中的任何线程都有资格被激活,获得锁。所以在某种程度上它们被激活,但它们不是“脉冲”,如果这就是你所说的发出信号的话。

相比之下,自愿调用 Wait 的线程在单独的队列中;它不会仅由产生锁的线程激活;线程返回就绪队列的唯一方法是,如果带有锁的线程调用 Pulse/PulseAll,或者发生超时。请注意,Pulse/PulseAll 产生锁 - 它们只是从休眠队列到就绪队列的线程。第二个示例中的锁仅在离开 lock 语句时产生。因此,请注意在 Pulse 之后的“做一些工作”(在您的示例中为 Signal)仍然在持有独占锁的同时完成(实际上,您不妨将 Pulse 移动到 lock 语句的末尾) .

关于c# - monitor.wait 是否向其他线程发出信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11989809/

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