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

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

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

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

pthread_create(3T)

pthread_create(3T) は、現在のプロセスに新しい制御スレッドを追加します。


プロトタイプ:
int	pthread_create(pthread_t *tid, const pthread_attr_t *tattr,
    void*(*start_routine)(void *), void *arg); 


#include <pthread.h>

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

/* デフォルト動作 */
ret = pthread_create(&tid, NULL, start_routine, arg);

/* デフォルト属性による初期化 */
ret = pthread_attr_init(&tattr);
/* デフォルト動作指定 */
ret = pthread_create(&tid, &tattr, start_routine, arg);

必要な状態動作を持つ tattrpthread_create() 関数が呼び出されます。start_routine は新しいスレッドで実行する関数です。start_routine が復帰すると、スレッドは終了状態を start_routine で戻される値に設定して終了します (詳細は、「pthread_create(3T) 」を参照してください)。

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

スレッドの生成で属性引数として NULL を使用するのは、デフォルト属性を使用するのと同じ効果があります。どちらの場合もデフォルトのスレッドが生成されます。tattr は初期化されると、デフォルト動作を獲得します。

戻り値

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


EAGAIN

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


EINVAL

tattr の値が無効です。