|
ビジーウェイト(Busy Waiting)とは、プロセスが条件が成り立つかどうかを定期的にチェックする手法の一種。例えば、キーボードからの入力を待ったり、ロックが獲得できるのを待ったりするのに使われる。ある時間だけ遅延させて何かを実行するのに使うこともある。 古いコンピュータでは特定の長さの時間だけ待つ方法がなかったため、何もしないループで時間をつぶした。しかし、最近のコンピュータはプロセッサの速度がそれぞれ異なるため、この種の時間遅延は不正確なことが多く、(ビジーウェイトをこの目的で使用しているプログラムは)プログラミングに不慣れなことを示す印でもある。 ビジーウェイトは特定の状況では正当な手法と言える。特にSMPシステム向けのオペレーティングシステム内のスピンロックの実装などがそうである。しかし、一般にはビジーウェイトすべきでない。CPU時間を費やして待つ時間があれば、他のスレッドを動作させるほうが効率的である。 == C言語でのコード例 == 以下は、C言語コードで2つのスレッドがグローバルな整数 i を共有している。1番目のスレッドはビジーウェイトで i の値の変化を待っている。 #include #include #include volatile int i; / * i はグローバルであり、全関数から見える。 volatile でもあるので、その値の変化はコンパイラからは 予測できない(他のスレッドが変更するため) */ / * t1 は i が 0 以外になることをスピンして待つ */ static void *f1() static void *f2() int main() UNIX系システムでは、次のように上記コードをコンパイルすることができる: $ cc spinlock.c -lpthread 抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)』 ■ウィキペディアで「ビジーウェイト」の詳細全文を読む スポンサード リンク
|