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

时间:2013-08-18 12:14:48

标签: linux-kernel mutex semaphore

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

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

建议使用down_interruptable()代替down()

  

作为一般规则,你不会这样做       想要使用不间断的操作,除非真的没有其他选择。不可中断的操作是创建不可杀戮过程的好方法(可怕的       “D状态”见于ps),并惹恼用户[Linux设备驱动程序第3版]

立即。这是我的问题:

互斥API有两个“类似”功能: mutex_lock_killable() mutex_lock_interruptable()。我应该选择哪一个?

1 个答案:

答案 0 :(得分:10)

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

使用mutex_lock_killable()允许您的驱动程序仅通过实际终止进程的信号中断,即当进程无法查看系统调用结果时,或者甚至再试一次。

如果可以保证互斥锁不会被长时间保留,请使用mutex_lock()