Namespaces
Variants

tss_create

From cppreference.net
定义于头文件 <threads.h>
int tss_create ( tss_t * tss_key, tss_dtor_t destructor ) ;
(C11 起)

创建新的线程特定存储键并将其存储在 tss_key 指向的对象中。尽管不同线程可能使用相同的键值,但通过 tss_set 绑定到该键的值是按线程独立维护的,并在调用线程的整个生命周期内持续存在。

新创建的键在所有现有线程中关联的值为 NULL ,并且在线程创建时,所有TSS键关联的值均被初始化为 NULL

如果 destructor 不是空指针,则同时关联析构函数,该函数在存储空间被 thrd_exit 释放时调用(但不会在 tss_delete 时调用,也不会在程序通过 exit 终止时调用)。

在线程特定存储析构函数内部调用 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)); // 在TSS中存储指针
        // ...
    }
} // 为TSS中存储的指针调用free()

参考文献

  • C17 标准 (ISO/IEC 9899:2018):
  • 7.26.6.1 tss_create 函数 (页: 281-282)
  • C11 标准 (ISO/IEC 9899:2011):
  • 7.26.6.1 tss_create 函数 (页: 386)