为什么不推荐使用兼容的互斥锁实现?

时间:2013-09-05 22:12:50

标签: linux-kernel operating-system embedded kernel mutex

在实现互斥锁时,有几种架构选择,例如

  1. 旋转互斥锁(自旋锁)

  2. 睡眠互斥(在等待时保持FIFO睡眠队列)

  3. 产生互斥锁(调用调度程序在WAITING时运行另一个进程)

  4. 为什么Yielding Mutex最不受欢迎?使用它的后果有多严重?

1 个答案:

答案 0 :(得分:2)

睡眠的互斥锁具有更多公平性。产生互斥会导致饥饿

屈服模型的问题在于,可能会要求一个进程反复屈服,而其他进程可以挖掘互斥锁(另请参阅 barging ),或者只需要等待更短的时间

根据新进程如何添加到队列中,甚至可能发生每次某个进程到达时,它都会被强制生成,因为互斥锁已经被占用,饿死进程

FIFO模型确保以先到先得的方式提供等待流程。在操作系统中实现起来比较困难,但更多 fair

模型可能变得更复杂。例如,OS也可以具有进程的优先级,并且优先级可以随时间改变。然后,队列系统可能会变得更加棘手。