マルチスレッドのプログラミング

デフォルトのスレッドの生成

属性オブジェクトを指定しなければ NULL となり、下記の属性を持つデフォルトスレッドが生成されます。

pthread_attr_init() でデフォルト属性オブジェクトを生成し、この属性オブジェクトを使ってデフォルトスレッドを生成することもできます。詳細については、「属性の初期化」を参照してください。

pthread_create の構文

現在のプロセスへ新たに制御スレッドを追加するときは、pthread_create(3C) を使用します。

int pthread_create(pthread_t *restrict tid, const pthread_attr_t 
    *restrict tattr, void*(*start_routine)(void *), void *restrict arg);
#include <pthread.h>

pthread_attr_t() tattr;
pthread_t tid;
extern void *start_routine(void *arg);
void *arg;
int ret; 

/* default behavior*/
ret = pthread_create(&tid, NULL, start_routine, arg);

/* initialized with default attributes */
ret = pthread_attr_init(&tattr);
/* default behavior specified*/
ret = pthread_create(&tid, &tattr, start_routine, arg);

pthread_create() 関数は、必要な状態動作を持つ attr で呼び出されます。start_routine は新しいスレッドで実行する関数です。start_routine で指定した関数が終了すると、スレッドはその関数の戻り値を終了状態に設定して終了します。pthread_create の構文」を参照してください。

pthread_create() が正常終了すると、生成されたスレッドの識別子が tid の指す記憶場所に格納されます。

pthread_create() の属性引数 (デフォルト属性) として NULL を指定すると、デフォルトスレッドが生成されます。()tattr は初期化されると、デフォルト動作を獲得します。

pthread_create の戻り値

pthread_create() は、正常終了時に 0 を返します。それ以外の戻り値は、エラーが発生したことを示します。以下のいずれかの条件が検出されると pthread_create() は失敗し、対応する値を返します。


EAGAIN

説明:

システム制限を超えました。たとえば、生成するスレッド数が多すぎます。


EINVAL

説明:

tattr の値が無効です。


EPERM

説明:

呼び出し元は、必要なスケジューリングパラメータまたはスケジューリングポリシーを設定するための適切なアクセス権を持っていません。