Namespaces
Variants

tss_create

From cppreference.net
定義先ヘッダ <threads.h>
int tss_create ( tss_t * tss_key, tss_dtor_t destructor ) ;
(C11以降)

新しいスレッド固有ストレージキーを作成し、それを tss_key が指すオブジェクトに格納します。 同じキー値が異なるスレッドで使用される場合でも、 tss_set によってキーにバインドされた値はスレッドごとに維持され、呼び出しスレッドのライフタイムを通じて持続します。

NULL は新しく作成されたキーに関連付けられ、すべての既存スレッドで有効です。また、スレッド作成時には、すべてのTSSキーに関連付けられた値は NULL に初期化されます。

destructor がnullポインタでない場合、 destructor も関連付けられ、このデストラクタはストレージが thrd_exit によって解放されるときに呼び出されます(ただし、 tss_delete による場合や、 exit によるプログラム終了時には呼び出されません)。

スレッド固有ストレージのデストラクタ内での tss_create の呼び出しは未定義動作を引き起こします。

目次

パラメータ

tss_key - 新しいスレッド固有ストレージキーを格納するメモリ位置へのポインタ
destructor - スレッド終了時に呼び出す関数へのポインタ

注記

この関数のPOSIXに相当するものは pthread_key_create です。

戻り値

thrd_success 成功した場合、 thrd_error それ以外の場合。

int thread_func(void *arg) {
    tss_t key;
    if (thrd_success == tss_create(&key, free)) {
        tss_set(key, malloc(4)); // TSSにポインタを格納
        // ...
    }
} // TSSに格納されたポインタに対してfree()を呼び出す

参考文献

  • C17規格 (ISO/IEC 9899:2018):
  • 7.26.6.1 tss_create関数 (p: 281-282)
  • C11標準 (ISO/IEC 9899:2011):
  • 7.26.6.1 tss_create関数 (p: 386)