我应该在Linux内核开发中使用哪种互斥锁变体?

std*_*all 8 mutex semaphore linux-kernel

AFAIK,在LDD3(Linux设备驱动程序第3版)编写完成后,mutex API被引入内核,所以书中没有对它进行描述.

该书描述了如何将内核的信号量API用于互斥功能.

它建议使用down_interruptable()而不是down():

作为一般规则,您不希望使用不间断操作,除非确实没有其他选择.不可中断的操作是创建不可杀死进程的好方法(在ps中看到可怕的"D状态"),并且惹恼用户[Linux设备驱动程序第3版]

现在.这是我的问题:

互斥锁API有两个"相似"功能: mutex_lock_killable()mutex_lock_interruptable().我应该选择哪一个?

CL.*_*CL. 10

使用mutex_lock_interruptible()功能可以让您的驱动程序被任何信号中断.这意味着应该编写系统调用以便可以重新启动它.(另见ERESTARTSYS.)

使用mutex_lock_killable()让你的司机被打断只有通过实际杀死进程,即当过程中有没有机会看看你的系统调用的结果,甚至再次尝试信号.

使用mutex_lock()时可以保证互斥锁不会长时间保留.