名称
pthread_create() ― 新しい実行用スレッドの作成
構文
#include <pthread.h>
int pthread_create(
pthread_t *thread,
const pthread_attr_t *attr,
void *(*start_routine)(void *),
void *arg
);
パラメータ
| thread | | 作成されたスレッド ID の格納位置へのポインタ。 |
| attr | | 作成されるスレッドの特性を記述した属性オブジェクトへのポインタ。
値が NULL である場合、デフォルトの属性が使用されます。 |
| start_routine | | 作成される新しいスレッドで実行される関数。 |
| arg | | 作成されたスレッドの start_routine に渡されるパラメータ。 |
説明
pthread_create() 関数は、呼び出したプロセス内で、新しく独立したスレッドを作成するために使用されます。
スレッドは、 attr で指定された属性に応じて作成されます。 attr が NULL である場合、デフォルトの属性が使用されます。 attr の属性値は、作成するスレッドの特性を詳細に記述するものです。
デフォルトの属性値の一覧は、関数 pthread_attr_init() を参照してください。
1 つの属性オブジェクトは、 pthread_create() 関数で何回でも使用することができます。
スレッドが属性オブジェクトを使用して作成されると、属性は、作成されたスレッド中にコピーされるのと同じことになります。
結果として、属性オブジェクトにどのような変更を加えても、前回初期化された条件変数には影響ありません。
特定の属性オブジェクトを必要とするすべての条件変数の初期化が済んでしまえば、属性オブジェクトはもう必要ありませんので、消去してもかまいません。
新しいスレッドが作成されるときには、 arg を唯一のパラメータとする start_routine() を実行します。 start_routine() が戻ると、 pthread_exit() への暗黙の呼び出しが行われたものとされます。
その際、 start_routine() の戻り値は、スレッドの終了ステータスコードとして使用されます。
作成されたスレッドのスケジューリング方針、優先順位、競合適用範囲、デタッチ状態、スタックサイズ、スタックアドレスは、 attr 中の該当属性に応じて初期化されます。 スレッドのシグナルマスクは、作成元のスレッドから受け継がれます。
スレッドの保留シグナル集合は、クリアされます。
スレッドの終了や終了するスレッドとの同期に関する詳細は、 pthread_exit(3T), pthread_detach(3T), pthread_join(3T) を参照してください。
pthread_create() の呼び出しに成功すると、作成されたスレッドの ID が thread に返されます。失敗すると、スレッドは作成されず、 thread の内容は不定です。
スレッド ID は、プロセス内でのみその一意性が保証されます。
注意: メインスレッドが main() から戻ると、暗黙の exit() 呼び出しが行われたものとされます。
その際、 main() の戻り値が、プロセスの終了ステータスコードとして使用されます。
メインスレッドは、 pthread_exit() を呼び出してプロセスを終了させなくても、終了できます。
戻り値
正常終了すると、 pthread_create() は、0 を返します。
それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。
エラー
以下の条件の場合、 pthread_create() 関数は、該当するエラー番号を返します。
| [EINVAL] | | attr が、無効なスレッド属性オブジェクトの場合。 |
| [EINVAL] | | thread で指定された値が、無効な場合。 |
| [EAGAIN] | | 別のスレッドを作成するために必要なリソースが使用できない場合、または呼び出したプロセスでのスレッドの数が、すでに PTHREAD_THREADS_MAX に達している場合。 |
| [EINVAL] | | attr で指定されたスケジューリング方針またはスケジューリング属性が無効な場合。 |
| [EPERM] | | attr で指定されたスケジューリング方針やパラメータでスレッドを作成するのに適切な特権を、呼び出し元が持っていない場合。 |
注意
終了時に結合しなかった結合可能スレッドが、 PTHREAD_THREADS_MAX 値としてカウントするかどうかは規定されません。
著者
pthread_create() は、IEEE POSIX P1003.1c 標準から派生しました。
標準準拠
pthread_create(): POSIX 1003.1c.