| 日本−日本語 |
|
|
|
![]() |
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > ppthread_key_create(3T)pthread ライブラリHP-UX 11i Version 2: September 2004 |
|
名称pthread_key_create(), pthread_key_delete() ― スレッド固有データキーの作成または削除 構文#include <pthread.h> パラメータ
説明pthread_key_create() は、重複しないスレッド固有データとして key を作成します。 key は、スレッド固有データを管理するために、プロセス内のスレッドで使用されます。 キーはすべてのスレッドで同じものを使用しますが、 key と結びついたスレッド固有データは、スレッドごとに値が保持されます。 各スレッドでは、 key に結びついたデータは、スレッドが存在するかぎり存続します。 プロセスはスレッド固有データキーを、 PTHREAD_KEYS_MAX 個まで作成できます。 新しいスレッド固有データキーが作成されると、各スレッドでは、初期値として NULL が新しいキーに結びつけられます。 スレッドが作成されると、新しいスレッドでは、プロセスで作成されたすべてのスレッド固有データキーの値に NULL が割り当てられます。 各スレッドのスレッド固有データキーに結びついた値を変えるには、 pthread_setspecific() を使用します。 注意: pthread_key_t は、不明瞭データ型です。 スレッドが終了する時点で、そのスレッド固有データキーの一部またはすべてに、 NULL 以外の値が結びつけられている可能性があります。 通常、これらの値は動的に割り当てられたメモリーへのポインターになります。 スレッドを終了するときにこれらのメモリーを解放しないと、プロセスで使用できるメモリーが減ってしまいます。 終了するスレッドのスレッド固有データを消去する目的で、任意のデストラクタ関数を、キーの作成時に指定することができます。 スレッドの終了時には、スレッドに結びついたスレッド固有データの値が調べられます。 スレッド固有データの値もデストラクタ関数もともに NULL でないキーが存在すると、そのデストラクタ関数は、スレッド固有データの値を唯一の引き数にして呼び出されます。 デストラクタ関数が呼び出される順序は、不定です。 すべてのデストラクタ関数が呼び出されると、終了するスレッドのスレッド固有データの値が、再び調べられます。 キーにデストラクタ関数が登録されていて NULL でない値がまだ結びつけられている場合、デストラクタ関数の呼び出し処理が繰り返されます。 このループを PTHREAD_DESTRUCTOR_ITERATIONS 回繰り返した後でもデストラクタ関数と結びついていて NULL でない値が存在する場合、システムはデストラクタ関数の呼び出しをやめることもありますが、 NULL でない値が存在しなくなるまでデストラクタ関数を呼び出し続ける可能性もあります。 注意:これにより、無限ループが生じる危険があります。 key のデストラクタ関数が不要の場合は、 destructor パラメータに NULL を指定します。 pthread_key_delete() 関数は、スレッド固有データである key を削除します。 key は、 pthread_key_create() によって以前に作成されたものでなければなりません。 key に結びついたスレッド固有データの値は、この関数が呼び出されるときに NULL である必要はありません。 削除した後で key を使用すると、結果は不定です。 デストラクタ関数が key に登録されていても、 pthread_key_delete() 関数では呼び出されません。 key が削除されると、 key に登録されたどのデストラクタ関数も、スレッドの終了時に呼び出されません。 key を使用している各スレッドでのアプリケーション用記憶領域は、アプリケーション自身で解放しなければなりません。 pthread_key_delete() 関数は、デストラクタ関数から呼び出すことができます。 戻り値正常終了すると、 pthread_key_create() と pthread_key_delete() は 0 を返します。 それ以外の場合、エラーの内容を表すエラー番号を返します (errno 変数は使用しません)。 |
|||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||