thread_local宏
概要:
#include <threads.h> #define thread_local _Thread_local
描述:
该宏会扩展为C语言关键词_Thread_local,表示线程存储期限。
具有块作用域对象的声明中,如果声明说明符包含_Thread_local,声明说明符还应该包含static或者extern。如果在标识符的任一声明中出现了_Thread_local声明说明符,该标识符的所有声明中都应该使用_Thread_local声明说明符。_Thread_local声明说明符不能用于函数声明。
使用_Thread_local声明说明符声明的对象具有线程存储期限。该对象的生存期是其声明线程的整个执行过程,并且其值在线程启动时初始化。不同线程中相同标识符标识的是不同对象;在表达式中使用标识符是指使用与评估表达式的线程相关联的对象。尝试从与对象关联的线程以外的线程访问具有线程存储期限的对象,结果将由实现定义。
ISO/IEC 9899:2018标准及以前标准中,thread_local是<threads.h>头文件中定义的宏;但ISO/IEC 9899:2024标准中,thread_local是C语言关键词;并且根据ISO/IEC 9899:2024标准,_Thread_local已经过时,不建议在新代码中使用。
范例:
|
|
输出:
Thread 1
Value of threadLocal: 5
Address of threadLocal: 00000272bdc43200
Thread 2
Value of threadLocal: 10
Address of threadLocal: 00000272bdc430d0
Thread 3
Value of threadLocal: 15
Address of threadLocal: 00000272bdc42be0
相关内容:
| tss_t | 保存线程专属存储指针标识符的完整对象类型。 |
主要参考资料: