名前空間
変種
操作

tss_create

提供: cppreference.com
< c‎ | thread
ヘッダ <threads.h> で定義
int tss_create( tss_t* tss_key, tss_dtor_t destructor );
(C11およびそれ以降)

新しいスレッドローカルストレージのキーを作成し、それを tss_key の指すオブジェクトに格納します。 異なるスレッドで同じキー値を使用することができますが、 tss_set によってキーに束縛される値は、スレッドごとに管理され、呼び出し元スレッドの生存期間の間、存続します。

すべての既存のスレッドにおいて、新たに作成されたキーには値 NULL が紐付けられます。 スレッド作成時、すべての TSS キーに紐付けられた値は NULL に初期化されます。

destructor がヌルポインタでなければ、ストレージが thrd_exit によって解放されるときに呼ばれる (しかし tss_deleteexit では呼ばれない) デストラクタが紐付けられます。

スレッドローカルストレージのデストラクタから 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)); // stores a pointer on TSS
        // ...
    }
} // calls free() for the pointer stored on TSS

[編集] 参考文献

  • C11 standard (ISO/IEC 9899:2011):
  • 7.26.6.1 The tss_create function (p: 386)