【问题标题】:What happens to a process and/or thread while it waits on a mutex?进程和/或线程在等待互斥体时会发生什么?
【发布时间】:2020-02-10 12:55:49
【问题描述】:

当进程和/或线程等待互斥体时,进程和/或线程处于哪个状态?它是在等待还是就绪或其他状态?我试图在网上搜索答案,但找不到明确、明确的答案,也许没有或可能没有,以发现我在这里发布了这个问题。

【问题讨论】:

  • 如果没有明确、明确的操作系统,就不可能有明确、明确的答案。互斥锁可能会旋转几个循环,希望持有互斥锁的线程只是将指针出队,因此会快速释放锁。这完全取决于您没有给出的特定实现。

标签: operating-system


【解决方案1】:

tl;dr: 等待时什么都没有发生;它只是一个内核数据结构。

不失一般性,所有操作系统都有某种模型,其中执行单元(任务)在状态之间移动:Ready、Running、Waiting。此任务有一个与之关联的数据结构,其中记录了它的状态和寄存器(以及其他内容)。

当任务从Ready 移动到Running 时,它保存的寄存器被加载到 cpu 上,并从上次保存的状态继续执行。最初,它保存的寄存器被设置为合理的值,以便程序启动。

RunningWaitingReady,它的寄存器存放在它的task数据结构中,这个结构放在一个列表中ReadyWaiting 任务。

WaitingReady,任务数据结构从Waiting列表中移除,并附加到Ready 列表。

当一个任务试图获取一个不可用的互斥体时,它会从正在运行(它怎么会尝试获取互斥体)移动到等待。如果互斥锁可用,它会保持正在运行,并且互斥锁将变为不可用。

当一个任务释放一个互斥体,而另一个任务等待该互斥体时,Waiting任务变为Ready,并获取该互斥体.如果许多任务Waiting,则选择一个来获取互斥锁并变为Ready,其余的保持Waiting

这是一个非常抽象的描述;实际系统由于多种同步机制(邮箱、队列、信号量、管道……)、优化各种路径的愿望以及多个 CPU 的利用率而变得复杂。

【讨论】:

    猜你喜欢
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    相关资源
    最近更新 更多