非常教程

C参考手册

线程支持 | Thread support

tss_create

在头文件<threads.h>中定义

int tss_create(tss_t * tss_key,tss_dtor_t析构函数);

(自C11以来)

创建新的线程专有存储密钥并将其存储在tss_key指向的对象中。 尽管不同线程可能使用相同的键值,但由tss_set绑定到键的值将以每个线程为基础进行维护,并在调用线程的整个生命周期内保持不变。

值NULL与所有现有线程中新创建的键相关联,创建线程后,与所有TSS键相关的值将初始化为NULL。

如果析构函数不是空指针,那么还会关联由thrd_exit(但不是由tss_delete而不是在程序终止处通过退出)释放存储器时调用的析构函数。

从特定于线程的存储析构函数调用tss_create会导致未定义的行为。

参数

tss_key

-

指向内存位置的指针以存储新的线程专用存储键

destructor

-

指向在线程退出时调用的函数的指针

注意

此函数的POSIX等价物是pthread_key_create。

返回值

如果成功则返回 thrd_success,否则返回 thrd_error。

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.1 tss_create函数(p:386)