本文に進む 日本−日本語
日本HPホーム 製品とサービス お客様サポート/ ダウンロード ソリューション ご購入の方法
≫ お問い合わせ
詳細検索オプション
日本HPホーム
HP-UX リファレンス: セクション 3 : ライブラリ (N~Z) > p

pthread_key_create(3T)

pthread ライブラリ
HP-UX 11i Version 2: September 2004
≫ 

テクニカル ドキュメント

PDF版
フィードバック
ここから本文が始まります

 ≫ 目次

 ≫ 索引

名称

pthread_key_create(), pthread_key_delete() ― スレッド固有データキーの作成または削除

構文

#include <pthread.h> 
 
int pthread_key_create( 
   pthread_key_t *key, 
   void (*destructor)(void *) 
); 
 
int pthread_key_delete( 
   pthread_key_t key 
); 

パラメータ

key  

新しいキーの値を受け取るメモリー領域 (create 関数) へのポインター、または削除するスレッド固有データキー (delete 関数)。

destructor  

スレッドが終了するときに、 key と結びついたデータを消去するために呼び出される関数。

説明

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 変数は使用しません)。

エラー

以下の条件の場合、 pthread_key_create() 関数は対応するエラー番号を返します。

[EINVAL] 

key で指定された値が無効な場合。

[EAGAIN] 

新しいスレッド固有データキーを作成するために必要なリソースが使用不能か、プロセスのキーの総数が PTHREAD_KEYS_MAX を超える場合。

[ENOMEM]  

key を作成するために必要なメモリー領域が足りない場合。

以下の条件の場合、 pthread_key_delete() 関数は該当するエラー番号を返します。

[EINVAL] 

key で指定された値が無効の場合。

著者

pthread_key_create()pthread_key_delete() は、IEEE POSIX P1003.1c 規格から派生しました。

参照

pthread_getspecific(3T), pthread_setspecific(3T)

標準準拠

pthread_key_create(): POSIX 1003.1c.
pthread_key_delete(): POSIX 1003.1c.

印刷用画面へ
プライバシー 本サイト利用時の合意事項
© 1983-2004 Hewlett-Packard Development Company, L.P.