1

我有一个内核模块,它通过 read() 向用户态进程提供数据。在数据可用之前,该进程会阻塞读取。我通过 read 方法中的 wait_event_interruptible() 实现了这一点。

数据来自一个中断处理程序,它把它吸入内存,然后安排一个小任务来处理它。原始代码调度 tasklet,然后调用 wake_up_interruptible() 重新激活被阻塞的读取。但是,这会导致竞争条件,因为在读取尝试将数据提供给用户进程之前,tasklet 可能尚未完成处理数据。

所以问题是,将我对 wake_up_interruptible() 的调用移到 tasklet 的末尾是否安全?

4

1 回答 1

2

是的,tasklet 完成后调用它是安全wake_up_interruptible()的。有关示例,请参见http://www.xml.com/ldd/chapter/book/ch09.html 。

于 2009-01-15T15:01:26.880 回答