我一直在寻找这个问题的答案一天,而且找不到直截了当的答案。我正在阅读上下文切换等待队列以及类似的东西确实掌握了所有内容。在阅读文章时,有人写道,当车队情况发生时,会有很多上下文切换。所以让我直截了当让我们假设一个线程在一个等待队列中,互斥锁解锁,cpu是否经常上下文切换到那个等待线程,看看它等待的互斥锁是否被解锁。如果这是真的意味着每次线程等待互斥锁解锁或条件变量的通知时,cpu上下文切换到那些线程进行检查。我对么? 谢谢你的帮助。
答案 0 :(得分:2)
我假设我们正在谈论OS级别的互斥体(没有用户模式旋转)。
操作系统将永久性地计划等待线程,直到互斥锁变为空闲。只有当正在等待的互斥锁被解锁时,操作系统才会安排一个或多个等待线程继续执行。
这意味着等待线程不会产生任何开销。 OS中没有忙循环(“切换”)。需要这样做是因为操作系统只是在互斥锁可用时解锁服务员。
想象一下,所有线程都在等待永远不会释放的互斥锁。在这种情况下,服务员永远不会跑,他们永远不会切换到。