命名空间
变体
操作

tss_delete

来自 cppreference.cn
< c‎ | thread
在头文件 <threads.h> 中定义
void tss_delete( tss_t tss_id );
(C11 起)

销毁由 tss_id 标识的线程局部存储。

如果通过 tss_create 注册了析构函数,则不会调用它(它们只在线程退出时调用,通过 thrd_exit 或从线程函数返回时),在调用 tss_delete 之前,程序员有责任确保知道 tss_id 的每个线程都执行了所有必要的清理。

如果在另一个线程正在为 tss_id 执行析构函数时调用了 tss_delete,则这是否会改变关联析构函数的调用次数是未指定的。

如果在调用线程正在执行析构函数时调用了 tss_delete,则与 tss_id 关联的析构函数将不会在此线程上再次执行。

目录

[编辑] 参数

tss_id - 之前由 tss_create 返回且尚未被 tss_delete 删除的线程局部存储键

[编辑] 返回值

(无)

[编辑] 注意

此函数的 POSIX 等效项是 pthread_key_delete

tss_delete 从不调用析构函数的原因是,析构函数(在线程退出时调用)通常旨在由最初设置析构函数将要处理的值(通过 tss_set)的同一线程执行,并且甚至可能依赖于该线程看到的该线程局部数据或其他线程局部数据的值。执行 tss_delete 的线程无权访问其他线程的 TSS。即使可以为每个线程与 tss_id 关联的自身值调用析构函数,tss_delete 也必须与每个线程同步,即使只是为了检查该线程中此 TSS 的值是否为 null(析构函数只对非 null 值调用)。

[编辑] 示例

[编辑] 参考

  • C17 标准 (ISO/IEC 9899:2018)
  • 7.26.6.2 tss_delete 函数 (p: 282)
  • C11 标准 (ISO/IEC 9899:2011)
  • 7.26.6.2 tss_delete 函数 (p: 386)