AFAIK,在LDD3(Linux设备驱动程序第3版)编写完成后,mutex API被引入内核,所以书中没有对它进行描述。
本书描述了如何将内核的信号量API用于互斥功能。
建议使用down_interruptable()
代替down()
:
作为一般规则,你不会这样做 想要使用不间断的操作,除非真的没有其他选择。不可中断的操作是创建不可杀戮过程的好方法(可怕的 “D状态”见于ps),并惹恼用户[Linux设备驱动程序第3版]
立即。这是我的问题:
互斥API有两个“类似”功能:
mutex_lock_killable()
mutex_lock_interruptable()
。我应该选择哪一个?
答案 0 :(得分:10)
使用mutex_lock_interruptible()
功能允许您的驱动程序被任何信号中断。
这意味着应该编写系统调用以便可以重新启动它。
(另见ERESTARTSYS。)
使用mutex_lock_killable()
允许您的驱动程序仅通过实际终止进程的信号中断,即当进程无法查看系统调用结果时,或者甚至再试一次。
如果可以保证互斥锁不会被长时间保留,请使用mutex_lock()
。