【发布时间】:2014-12-12 19:03:23
【问题描述】:
假设 Linux 驱动程序代码获得了一个自旋锁,在临界区中,一个函数调用会强制在驱动程序之上运行的进程进入睡眠状态。知道持有自旋锁会禁用相关处理器上的抢占,进程是否有可能唤醒,从而允许驱动程序代码释放自旋锁?
【问题讨论】:
标签: linux-kernel kernel linux-device-driver kernel-module
假设 Linux 驱动程序代码获得了一个自旋锁,在临界区中,一个函数调用会强制在驱动程序之上运行的进程进入睡眠状态。知道持有自旋锁会禁用相关处理器上的抢占,进程是否有可能唤醒,从而允许驱动程序代码释放自旋锁?
【问题讨论】:
标签: linux-kernel kernel linux-device-driver kernel-module
不,不允许在持有自旋锁时休眠。这样做的代码有问题。
进程被唤醒的唯一方法是,如果在另一个内核上运行的代码做了一些事情来唤醒它(这意味着是的,如果只有一个内核,它肯定会死锁)。
【讨论】:
虽然自旋锁其他进程无法唤醒它,但您可以尝试使用信号量进行此类切换
【讨论】: