3

我正在关注Linux Device Drivers 3rd Edition书中的一个示例:

if (temp =  = 0)
    wake_up_interruptible_sync(&scull_w_wait); /* awake other uid's */
return 0;

作者指出:

这是一个调用 wake_up_interruptible_sync 有意义的示例。当我们进行唤醒时,我们正要返回用户空间,这是系统的自然调度点。与其在我们进行唤醒时潜在地重新安排,不如只调用“同步”版本并完成我们的工作。

我不明白为什么wake_up_interruptible_sync在这种情况下使用更好。作者暗示这个调用将阻止重新调度——它确实在调用中阻止了它——但是在返回之后,另一个线程不能在该行wake_up_interruptible_sync之前控制 CPU吗?return 0

那么,如果一个线程在每次调用之后都可以控制 CPU,那么调用wake_up_interruptible_sync典型的有什么区别呢?wake_up_interruptible

4

1 回答 1

3

使用的原因_sync是我们知道调度器会在短时间内运行,所以不需要第二次运行。然而,这只是一个优化;如果调度程序确实再次运行,则不会发生任何不好的事情。

定时器中断确实可以在任何时候发生,但只有当调度程序最近由于某些其他原因没有运行时才需要它。

于 2013-04-25T09:24:43.983 回答