Operating system 进程和/或线程在等待互斥时会发生什么情况?

Operating system 进程和/或线程在等待互斥时会发生什么情况?,operating-system,Operating System,当进程和/或线程在互斥锁上等待时,进程和/或线程处于何种状态?它处于等待、准备或其他状态吗?我试图在网上搜索答案,但找不到一个明确的答案,可能没有,也可能有,以发现我在这里发布了这个问题。tl;医生:当它在等待时,什么也不会发生;它只是一个内核数据结构 在不丧失通用性的情况下,所有操作系统都有某种模型,其中一个执行任务单元在状态之间移动:就绪、运行、等待。此任务有一个与之关联的数据结构,其中记录其状态和寄存器以及其他内容 当任务从就绪状态移动到运行状态时,其保存的寄存器将加载到cpu上,并从上次

当进程和/或线程在互斥锁上等待时,进程和/或线程处于何种状态?它处于等待、准备或其他状态吗?我试图在网上搜索答案,但找不到一个明确的答案,可能没有,也可能有,以发现我在这里发布了这个问题。

tl;医生:当它在等待时,什么也不会发生;它只是一个内核数据结构

在不丧失通用性的情况下,所有操作系统都有某种模型,其中一个执行任务单元在状态之间移动:就绪、运行、等待。此任务有一个与之关联的数据结构,其中记录其状态和寄存器以及其他内容

当任务从就绪状态移动到运行状态时,其保存的寄存器将加载到cpu上,并从上次保存的状态继续执行。最初,将其保存的寄存器设置为程序启动的合理值

从运行到等待或准备,它的寄存器存储在它的任务数据结构中,并且这个结构被放置在准备或等待任务的列表中

从等待到就绪,任务数据结构将从等待列表中删除并附加到就绪列表中

当一个任务试图获取一个不可用的互斥体时,它会从运行转移到等待。如果互斥锁可用,它将保持运行,互斥锁将不可用

当一个任务释放互斥体,而另一个任务正在等待该互斥体时,等待的任务将准备就绪并获取互斥体。如果有许多任务正在等待,则选择一个任务获取互斥并准备就绪,其余任务仍在等待


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

没有清晰、明确的操作系统,就不会有明确的答案。互斥锁可能会旋转几个循环,希望持有互斥锁的线程只是,比方说,让指针退出队列,从而快速释放锁。这完全取决于特定的实现,而您尚未给出。