tss_delete
来自 cppreference.com
定义于头文件 <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(析构函数仅针对非空值调用)。
[编辑] 示例
本节内容尚未完善 原因:无示例 |
[编辑] 参考资料
- 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)