在实现互斥锁时,有几种架构选择,例如
旋转互斥锁(自旋锁)
睡眠互斥(在等待时保持FIFO睡眠队列)
产生互斥锁(调用调度程序在WAITING时运行另一个进程)
为什么Yielding Mutex最不受欢迎?使用它的后果有多严重?
答案 0 :(得分:2)
睡眠的互斥锁具有更多公平性。产生互斥会导致饥饿。
屈服模型的问题在于,可能会要求一个进程反复屈服,而其他进程可以挖掘互斥锁(另请参阅 barging ),或者只需要等待更短的时间
根据新进程如何添加到队列中,甚至可能发生每次某个进程到达时,它都会被强制生成,因为互斥锁已经被占用,饿死进程
FIFO模型确保以先到先得的方式提供等待流程。在操作系统中实现起来比较困难,但更多 fair 。
模型可能变得更复杂。例如,OS也可以具有进程的优先级,并且优先级可以随时间改变。然后,队列系统可能会变得更加棘手。