在实现互斥体时,有几种架构选择,例如,
旋转互斥锁(自旋锁)
睡眠互斥体(等待时保持 FIFO 睡眠队列)
Yielding mutex(WAITING 时调用调度程序运行另一个进程)
为什么 Yielding Mutex 最不受欢迎?以及使用它的后果有多严重?
在实现互斥体时,有几种架构选择,例如,
旋转互斥锁(自旋锁)
睡眠互斥体(等待时保持 FIFO 睡眠队列)
Yielding mutex(WAITING 时调用调度程序运行另一个进程)
为什么 Yielding Mutex 最不受欢迎?以及使用它的后果有多严重?
休眠互斥体更公平。产生互斥锁会导致饥饿。
让步模型的问题在于,一个进程可能会被要求一次又一次地让步,而其他进程会获取互斥锁(另请参见barging),或者只需要等待更短的时间。
根据将新进程添加到队列中的方式,甚至可能发生这样的情况:每次某个进程轮到它的时候,它就会被迫让步,因为互斥体已经被占用,从而使进程饿死。
FIFO 模型确保以先到先服务的方式为等待进程提供服务。在操作系统中实现起来更难,但更公平。
模型可以变得更复杂。例如,操作系统也可能有进程的优先级,并且优先级会随着时间而改变。然后队列系统的实现会变得更加棘手。