Namespaces
Variants

tss_set

From cppreference.net
ヘッダーで定義 <threads.h>
int tss_set ( tss_t tss_id, void * val ) ;
(C11以降)

現在のスレッドに対して、 tss_id で識別されるスレッド固有ストレージの値を val に設定します。異なるスレッドは同じキーに対して異なる値を設定することができます。

デストラクタが利用可能であっても、呼び出されません。

目次

パラメータ

tss_id - スレッド固有ストレージキー。 tss_create から取得され、 tss_delete によって削除されない
val - スレッド固有ストレージに設定する値

戻り値

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

注記

この関数のPOSIX相当は pthread_setspecific です。

通常、TSSは、呼び出しスレッドが使用するために確保された動的に割り当てられたメモリブロックへのポインタを格納するために使用されます。

tss_set はTSSデストラクタ内で呼び出される可能性があります。デストラクタがTSSストレージに非NULLの値で終了した場合、 thrd_exit によって最大 TSS_DTOR_ITERATIONS 回まで再試行され、その後ストレージは失われます。

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.4 tss_set関数 (p: 282-283)
  • C11規格 (ISO/IEC 9899:2011):
  • 7.26.6.4 tss_set関数 (p: 387)

関連項目

(C11)
スレッド固有ストレージから読み取り
(関数)