sleep_on - 状態変数を使ってプロセスの同期を取る
#include <linux/sched.h> void sleep_on(struct wait_queue**condition)
sleep_on関数は、プロセスと割り込みハンドラ間の同期合わせの手段を 提供する。condition変数は、漠然とした(opaque)wait_queueタイプ のポインタである。condition変数を0に初期化してから、その変数へ のポインタをsleep_on関数に渡してやる。基本的な使用法は以下の通り。
struct wait_queue*con = 0; [...] sleep_on(&con);
プロセスがスリープしている間は、そのプロセスは、当該関数に入るとき のCPU状態にかかわらず完全に割込み可能となっている。スリープか ら解除される際に、CPUの状態は当該関数に入るときの状態に戻される。
sleep_onにNULL(0)が渡されても、スリープせずに即時に復帰する。 これは何もしないことと同じである。
sleep_on関数は、明示的にスリープから解除された場合のみ関数から 返ってくる。
Linux 1+
wake_up(9) /usr/src/linux/kernel/sched.c
Stephen Williams (steve@icarus.com)
sleep_on(0) のようにコールすることは、瞬間的に割り込みを許可 するためのちょっと気の利いたやり方のように思われるが、実際は 何も起こらない。
sleep_on関数を割り込みハンドラからコールすることはできない。
この関数は、ドライバの開発者が状態の確認をするためにちょっと 入れてみるような、ごく基本的な関数ではない。そのため、sleep_on 関数を実行しようとしている関数は、割り込みから保護されている 必要がある。このコールに失敗してしまった場合、その結果は一般的 にはタイミングに依存する。