tss_delete
tss_delete
在头文件 | | |
---|---|---|
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_create返回且尚未由tss_delete删除的线程专用存储键 |
---|
返回值
(无).
注意
这个函数的POSIX等价物是pthread_key_delete。
tss_delete永远不会调用析构函数的原因是析构函数(在线程退出时调用)通常是由同一个线程执行的,该线程最初设置了析构函数将要处理的值(通过tss_set),甚至可能依赖于值 该线程看到的那个或其他线程特定的数据。 执行tss_delete的线程无法访问其他线程的TSS。 即使可以为与tss_id相关的每个线程自己的值调用析构函数,tss_delete也必须与每个线程同步,以便检查该线程中此TSS的值是否为空(析构函数仅针对非null值)。
例
参考
- C11标准(ISO / IEC 9899:2011):