命名空间
变体
操作

tss_set

来自 cppreference.com
< 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_set 可以在线程局部存储析构函数中调用。如果析构函数退出时线程局部存储中的值为非 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

[编辑] 参考资料

  • 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)

[编辑] 参见

从线程局部存储中读取
(函数) [编辑]