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):