gpt4 book ai didi

c# - Monitor.Wait() 是否仍然调用上下文切换?

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:35 25 4
gpt4 key购买 nike

如果我在 Monitor.Wait()Pulse等待,如下例所示,系统是否仍会安排等待线程(包括上下文切换)并在产生时间片之前检查条件?

或者线程没有被再次调度,并且在另一个线程调用 Monitor.Pulse() 时被内核“唤醒”?

Monitor.Enter(LOCK_OBJ);
Monitor.Wait(LOCK_OBJ);
Monitor.Exit(LOCK_OBJ);

我问的原因是,我想避免线程长时间等待时不必要的上下文切换。基本上,我想让线程“休眠”。

最佳答案

Monitor.Wait 实现在 When exactly .NET Monitor goes to kernel-mode? 中有详细讨论。 .

如果锁定时间很短并且内核模式等待和上下文切换的成本太高,您应该考虑使用 spinlock 代替。自旋锁不是让出 CPU,而是忙循环尝试获取锁。优点是它永远不会产生上下文切换的开销。缺点是它会使 CPU 忙碌。

对于一些共享数据被非常短暂锁定的高性能游戏引擎,自旋锁是正确的选择。

关于c# - Monitor.Wait() 是否仍然调用上下文切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22430233/

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