pthread
pthread とは、POSIXスレッドのことで、POSIX標準のスレッドです。pthreadは、Unix系(Linux,FreeBSD)などで使われます。C言語でスレッドプログラミングをするときに使用されるCライブラリです。スレッドを使用することで、プログラムを並列的に動かすことができます。プロセスを作成するforkとの違いは、スレッドは同じメモリ空間で動作するため、プロセスのリソースが共有されるということです。
読み方
- phtread
- ぴーすれっど
概要
スレッドとは
スレッドは、「軽量プロセス」とも呼ばれます。 スレッドプログラムとマルチプロレスのプログラムの主な違いは、スレッドは、同じメモリ空間でリソースを共有することです。
マルチスレッドの利点
- アプリケーションの応答性が改善できる
- リステムリソースを節約できる
- スレッド同士でデータを共有できる
シングルプロセスのプログラムでは、1つ1つの処理が終わるまで、次の処理がはじまりません。待たされるような処理が複数ある場合、それを1つ1つ順番に実行すると、プログラムの実行時間は、それらの総和の時間とイコールになります。
依存関係のない「待たされる処理」を並列で実行した場合、プログラムの実行時間は、「待たされる処理」の最長の時間だけにできるかもしれません。複数のデータベースに問い合わせるようなプログラムであれば、同時にすべてのデータベースに問い合わせをして、プログラムは、それらが返ってくるのを待てばいいわけです。
マルチプロセスの利点
マルチプロセスは、ある意味では、コーディングが単純化され、問題は、そのプロセスだけに閉じることができる(かもしれない)ということでしょう。
マルチプロセスの利点は、メモリ空間が分断されていることです。また、プロセスが分かれていることもメリットです。
メモリ空間が分断されているということは、競合を起こす相手がいないため、メモリへのアクセスに関しては、ロックなどの処理が不要ということです。
プロセスが分かれている利点は、1つのプロセスが仮に Segmentation Fault を起こすようなバグがあったときに、影響範囲がそのプロセスで済むかもしれない、ということです。マルチスレッドのプログラムで Segmentation Fault を引き起こすと、すべてのスレッドが道連れになります。マルチプロセスモデルでは、Segmentation Fault を引き起こしたプロセスだけが消滅し、ほかのプロセスは、そのままサービスを継続できます。
ここからは利点ではありませんが、マルチプロセスでデータを共有しようと思ったとき、共有メモリとロックを使用したり、プロセス間通信(Unixドメインソケット、ソケット、パイプ)を行うなど、そういったプログラミングが必要になります。
インストール
ベースシステムで用意されています。
ヘッダファイル
#include <pthread.h>
コンパイル
$ cc -lpthread main.c
もしくは pthread-config を使用して、Makefileに以下のように記述します。
CFLAGS=`pthread-config --cflags` LDFLAGS=`pthread-config --ldflags` LIBS=`pthread-config --libs`
マルチスレッドプログラミング
- pthreadとは
- pthread errnoとpthreadライブラリ関数の戻り値
- pthread 1つのスレッドを動かす
- pthread 2つのスレッドを動かす
- pthread mutexで排他ロックする方法
- pthreadのスレッド識別子pthread_t型
- pthread スレッドに値を渡す方法
- pthread スレッドから値を返す方法
関連項目
ツイート