9

AFAIK,在 LDD3(Linux 设备驱动程序第 3 版)编写之后,互斥体 API 被引入内核,因此书中没有描述。

本书描述了如何使用内核的信号量 API 来实现互斥功能。

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

作为一般规则,您不希望使用不可中断操作,除非确实别无选择。不可中断的操作是创建无法杀死的进程(在 ps 中看到的可怕的“D 状态”)并惹恼用户的好方法 [Linux Device Drivers 3rd ed]

现在。这是我的问题:

mutex API 有两个“相似”的功能: mutex_lock_killable()一个mutex_lock_interruptable(). 我应该选择哪一个?

4

1 回答 1

12

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

用于mutex_lock_killable()允许您的驱动程序被实际终止进程的信号中断,即当进程没有机会查看您的系统调用的结果时,甚至无法再次尝试。

mutex_lock()当您可以保证互斥锁不会被长时间持有时使用。

于 2013-08-18T14:01:36.670 回答