2

我一直在寻找这个问题的答案一天,但找不到一个直截了当的答案。我正在阅读有关上下文切换等待队列之类的内容,确实对所有内容都有很好的掌握。并且在阅读一篇文章时,有人写道,当发生护航情况时,将会有很多上下文切换。因此,让我直截了当地假设一个线程在等待队列中等待互斥锁解锁,cpu 是否不断地上下文切换到该等待线程以查看其等待的互斥锁是否已解锁。如果这是真的,则意味着每次线程等待互斥锁解锁或条件变量通知时,cpu 上下文都会切换到这些线程进行检查。我对么?谢谢你的帮助。

4

1 回答 1

2

我假设我们正在谈论操作系统级别的互斥锁(没有用户模式旋转)。

操作系统将永久取消调度等待线程,直到互斥锁变得空闲。只有当正在等待的互斥锁被解锁时,操作系统才会调度一个或多个等待线程以恢复执行。

这意味着没有等待线程引起的开销。操作系统中没有忙循环旋转(“切换”)。之所以需要这样做,是因为操作系统只是在互斥锁可用时解除对服务员的阻塞。

想象一下,所有线程都在等待一个永远不会被释放的互斥锁。在那种情况下,服务员永远不会跑,他们永远不会被切换到。

于 2013-03-24T11:53:56.913 回答