tss_create
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <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_delete や exit では呼ばれない) デストラクタが紐付けられます。
スレッドローカルストレージのデストラクタから tss_create を呼ぶことは未定義動作です。
引数
| tss_key | - | 新しいスレッドローカルストレージのキーを格納するメモリ位置を指すポインタ |
| destructor | - | スレッド終了時に呼ばれる関数を指すポインタ |
ノート
この関数と同等な POSIX の関数は pthread_key_create です。
戻り値
成功した場合は thrd_success、そうでなければ thrd_error。
例
| This section is incomplete Reason: improve, perhaps look for POSIX examples for inspiration |
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)