待機
読み:たいき
外語:wait

 機会が来ることを待つこと。
目次

概要
 コンピューターの処理でも、ある処理のあと、いくらかの時間を待つ必要などが生じることが多々あり、この場合に待機することになる。
 プログラミングにおいては、次の二種類がある。

特徴

プログラミング
 プログラミングでウェイトを作る方法は様々存在する。
 例えばLinux(Androidのカーネル含む)でウェイトを作りたい場合、ユーザー空間ではsleep()やusleep()、nanosleep()などが使われる。カーネル内では短時間ならば*delay関数、それ以外ならば*sleep関数を使うことが多い。
 そのほかにも、taskletやworkqueue、あるいはタイマーを用いて自力で実装することも可能である。
 いずれにせよ、システムの動作状況や呼び出しに要する時間、あるいはシステムタイマーの粒度など様々な要因により、指定した時間よりも若干延ばされる傾向にある。

ライブラリ関数
 通常のアプリケーションを作成するためのライブラリ関数である。
 POSIX.1-2001では、次が定義されている。
 unistd.h
#include <unistd.h>
unsigned int sleep(unsigned int seconds);
int usleep(useconds_t usec);
 time.h
#include <time.h>
int nanosleep(const struct timespec *req, struct timespec *rem);

カーネル関数
 カーネルでは、一般のライブラリ関数とは異なるものが使われている。Linuxカーネルの場合は、次の通り。

delay関数
 delay関数はビジーウェイトであり、内部ではループ処理等で処理時間を稼いでいる。
 linux/delay.h
void mdelay( unsigned long msecs ) ;
void udelay( unsigned long usecs ) ;
void ndelay( unsigned long nsecs ) ;

sleep関数
 sleep関数は、ウェイト中に、CPUを他のスレッドに対してスケジューリングする。
 通常はSIGALRMなどのシグナルを用いて実装されており、時間が経過してシグナルが発生すると、元の処理に戻るようになっている。
 linux/delay.h
void ssleep( unsigned int seconds );
void msleep( unsigned int msecs ) ;
unsigned long msleep_interruptible( unsigned int msecs ) ;

再検索