int pthread_key_create(pthread_key_t *key, void (*destructor) (void *));
#include <pthread.h> pthread_key_t key; int ret; /* key create without destructor */ ret = pthread_key_create(&key, NULL); /* key create with destructor */ ret = pthread_key_create(&key, destructor);
pthread_key_create(3C) は、プロセス内のスレッド固有データを識別するためのキー (key) を割り当てます。このキーは、プロセス内のすべてのスレッドに大域的なキーです。スレッド固有データが生成された時点では、すべてのスレッドで、キーの初期値として NULL が関連付けられています。
pthread_key_create() は、キーの使用前に各キーについて 1 回呼び出します。プロセス内のすべてのスレッドが共有するキーについては、暗黙の同期はありません。
作成されたキーに対して、各スレッドは特定の値を結び付けることができます。その値はスレッドに固有で、スレッドごとに独立に維持管理されます。スレッド単位での割り当ては、キーがデストラクタ関数 (destructor) で作成された場合は、スレッドの終了時にその割り当てを解除されます。
pthread_key_create() が正常終了すると、割り当てられたキーは key が指す位置に格納されます。このキーに対する記憶領域とアクセスとの同期は呼び出し側の責任でとらなければなりません。
各キーに任意で、デストラクタ関数を関連付けることができます。あるキーが NULL でないデストラクタ関数を持っていて、スレッドがそのキーに対して NULL 以外の値を関連付けている場合、そのスレッドの終了時に現在関連付けられている値を指定してデストラクタ関数が呼び出されます。どの順番でデストラクタ関数が呼び出されるかは不定です。