线程本地存储
可以使用 thread_local
关键字创建线程本地存储。用 thread_local
说明符声明的变量据说具有线程存储持续时间。
- 程序中的每个线程都有自己的每个线程局部变量的副本。
- 具有函数(本地)作用域的线程局部变量将在控件第一次通过其定义时初始化。除非声明
extern
,否则这样的变量是隐式静态的。 - 具有名称空间或类(非本地)作用域的线程局部变量将作为线程启动的一部分进行初始化。
- 线程终止时销毁线程局部变量。
- 如果类的成员是静态的,则它只能是线程本地的。因此,每个线程将有一个该变量的副本,而不是每个(线程,实例)对一个副本。
例:
void debug_counter() {
thread_local int count = 0;
Logger::log("This function has been called %d times by this thread", ++count);
}