【问题标题】:Which mutex lock variant should I use in Linux kernel developing?我应该在 Linux 内核开发中使用哪种互斥锁变体?
【发布时间】:2013-08-20 08:58:34
【问题描述】:

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

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

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

一般情况下,您不会 除非确实别无选择,否则希望使用不可中断的操作。不可中断的操作是创建不可终止进程的好方法(可怕的 在 ps 中看到“D state”),并惹恼你的用户 [Linux Device Drivers 3rd ed]

现在。这是我的问题:

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

【问题讨论】:

    标签: linux-kernel mutex semaphore


    【解决方案1】:

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

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

    在可以保证互斥量不会被长时间持有的情况下使用mutex_lock()

    【讨论】:

    • 知道为什么信号量 API 上不存在这种变体(可杀死)吗?
    • 没有人觉得有必要实现这个,因为信号量没有被广泛使用。
    猜你喜欢
    • 2014-10-09
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2012-10-27
    • 2013-01-17
    相关资源
    最近更新 更多