tss_set

< c‎ | thread
定义于头文件 <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 析构器中调用 tss_set 。若 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()

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 7.26.6.4 The tss_set function (p: 387)

参阅

从线程特定存储读取
(函数)