理系学生日記

おまえはいつまで学生気分なのか

スレッド

スレッドはプロセスと良く似ており、1 つのプログラムを同時に並行して実行することができる。概念的にはスレッドはプロセスの中で走る。つまりスレッドはプロセスよりも粒度の細かい概念である。
プロセスの場合、子プロセスのメモリ空間やファイルディスクリプタ等は親プロセスのそれとは独立している。一方でスレッドの場合、スレッドを作った側と作られた側はそれらを共有する。

GNU/Linux は POSIX の標準 スレッド API (pthreads) を実装している。全関数およびデータ型は pthread.h に記述されている。


各スレッドは thread ID によって識別される。その型は pthread_t である。
スレッドは作成されると、それぞれがスレッド関数を実行する。スレッド関数は void* を引数にとり、void* を返す。この関数を実行し終わると、スレッドは終了する。

スレッドの作成を行う関数は pthread_create であるが、この関数は即座に制御を戻す。そして、呼び出し側のスレッドは、プログラムの実行を続ける。また、作成されたスレッドは、スレッド関数の実行を開始する。

一般には、スレッドが終了する 2 つの方法がある。1 つはスレッド関数の終了であり、もう一つはスレッド関数からの pthread_exit の呼び出しである。