tss_create
|
定義先ヘッダ
<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 それ以外の場合。
例
|
このセクションは不完全です
理由:改善が必要、おそらくインスピレーションを得るためにPOSIXの例を探すこと |
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)