3

Linux Device Drivers 3rd Edition bookの例に従っています。

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

使用する理由は、スケジューラーが短時間で実行されることがわかっているため、2 回目に実行する必要がないから_syncですただし、これは単なる最適化です。スケジューラ再び実行されたとしても、悪いことは何も起こりません。

タイマー割り込みは実際にはいつでも発生する可能性がありますが、スケジューラが他の理由で最近実行されていない場合にのみ必要になります。

于 2013-04-25T09:24:43.983 に答える