Linux kernel 为什么不建议使用可产生互斥的实现?

Linux kernel 为什么不建议使用可产生互斥的实现?,linux-kernel,operating-system,embedded,kernel,mutex,Linux Kernel,Operating System,Embedded,Kernel,Mutex,在实现互斥时,有几种体系结构选择,例如 旋转互斥锁(自旋锁) 睡眠互斥(等待时保持FIFO睡眠队列) 产生互斥(等待时调用调度程序运行另一个进程) 为什么最不喜欢产生互斥?使用它的后果有多严重?睡眠互斥器更公平。产生互斥可以导致饥饿 屈服模型的问题是,一个进程可能会被要求一次又一次屈服,而其他进程则会获取互斥锁(请参见barging),或者只需等待更短的时间 根据向队列中添加新进程的方式,甚至可能在每次某个进程轮到它时,它都会被迫让步,因为互斥锁已经被占用,导致进程饥饿 先进先出模式确保以先到先

在实现互斥时,有几种体系结构选择,例如

  • 旋转互斥锁(自旋锁)

  • 睡眠互斥(等待时保持FIFO睡眠队列)

  • 产生互斥(等待时调用调度程序运行另一个进程)


  • 为什么最不喜欢产生互斥?使用它的后果有多严重?

    睡眠互斥器更公平。产生互斥可以导致饥饿

    屈服模型的问题是,一个进程可能会被要求一次又一次屈服,而其他进程则会获取互斥锁(请参见barging),或者只需等待更短的时间

    根据向队列中添加新进程的方式,甚至可能在每次某个进程轮到它时,它都会被迫让步,因为互斥锁已经被占用,导致进程饥饿

    先进先出模式确保以先到先得的方式为等待流程提供服务。在操作系统中实现起来更难,但更公平


    模型可能会变得更复杂。例如,操作系统也可能有进程的优先级,并且优先级会随着时间的推移而变化。然后,队列系统可能会变得更加难以实现。

    它们似乎都很有用,这取决于任务和需求。我不知道为什么一个人[总是]是“最不受欢迎的”。是否有特定的资源/链接可用于做出此类断言?希望它也能提供一个理由和背景。如果你能详细说明这个答案,我将+1。