PTHREAD_KEY_CREATE(3)

名称
pthread_key_create - スレッド固有のデータキーの作成

ライブラリ
libc_r

書式
<pthread.h> int pthread_key_create(pthread_key_t *key, void (*destructor)(void *))

解説
pthread_key_create() 関数は、プロセス内の全てのスレッドに可視のスレッド固有のデータキーを 作成します。 pthread_key_create() によって提供されたキーの値は、スレッド固有のデータの位置を示すために 使用される不透明なオブジェクトです。 別のスレッドによって同じキー値が使用されることが可能ですが、 pthread_setspecific() によってキーに結びつけられた値はスレッド毎を基準に保守され、 呼び出しているスレッドが生きている間存続します。

キーの作成時には、全てのアクティブなスレッド内の新しいキーに、値 NULL が 関連付けられます。 スレッドの作成時には、新しいスレッド内の全ての定義済のキーに、値 NULL が 関連付けられます。

任意のデストラクタ関数は、個々のキーの値と関連付けられることができます。 スレッドの終了時に、キー値が NULL でないデストラクタのポインタを持ち、 かつスレッドがキーに関連付けられた NULL でない値を持っている場合には、 現在関連付けられている値を唯一の引数として、指されている関数が呼び出されます。 スレッドの終了時にそのスレッドのための 1 つ以上のデストラクタ関数が 存在する場合には、デストラクタの呼び出しの順序は未規定です。

デストラクタに関連付けられた全ての NULL でない値のために、全ての デストラクタが呼び出された後で、まだ幾つかの関連付けられたデストラクタを 持つ NULL でない値がある場合には、その過程が繰り返されます。 最低でも [PTHREAD_DESTRUCTOR_ITERATIONS] 回のデストラクタの呼び出しの 繰り返しの後で、まだなお幾つかの関連付けられたデストラクタを 持つ NULL でない値がある場合には、実装はデストラクタの呼び出しを中止します。

戻り値
問題がない場合は、 pthread_key_create() 関数は、新しく作成されたキーの値を key で指定された場所に格納し、0 を返します。 問題がある場合は、そのエラーを示すためにエラー番号が返されます。

エラー
pthread_key_create() は以下の場合に失敗します。

[EAGAIN]
    別のスレッド固有のデータキーを作成するために必要なリソースがシステムに 不足しています。または、1 つのプロセスごとのキーの総数についての システムの制限 [PTHREAD_KEYS_MAX] を超過しました。

[ENOMEM]
    キーを作成するための十分なメモリがありません。

関連項目
pthread_getspecific(3), pthread_key_delete(3), pthread_setspecific(3)

規格
pthread_key_create() は p1003.1-96 に適合しています。