非常教程

C参考手册

线程支持 | Thread support

tss_set

在头文件<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)); // stores a pointer on TSS
        // ...
    }
} // calls free() for the pointer stored on TSS

参考

  • C11标准(ISO / IEC 9899:2011):
    • 7.26.6.4 tss_set 函数(p:387)

扩展内容

tss_get(C11)

从线程专有存储器读取(功能)