1

read() を介してユーザーランド プロセスにデータを提供するカーネル モジュールがあります。そのプロセスは、データが利用可能になるまで読み取り時にブロックされます。read メソッドの wait_event_interruptible() を使用してこれを実現します。

データは割り込みハンドラから取得され、メモリに吸い込まれ、それを処理するタスクレットをスケジュールします。元のコードは、タスクレットをスケジュールし、wake_up_interruptible() を呼び出して、ブロックされた読み取りを再度有効にします。ただし、読み取りがユーザー プロセスにデータを渡そうとする前に、タスクレットがデータの処理を完了していない可能性があるため、競合状態が発生します。

問題は、wake_up_interruptible() への呼び出しをタスクレットの最後に移動しても安全かということです。

4

1 に答える 1

2

wake_up_interruptible()はい、タスクレットが完了したときに呼び出すのは安全です。例については、 http://www.xml.com/ldd/chapter/book/ch09.htmlを参照してください。

于 2009-01-15T15:01:26.880 に答える