线程局部存储是指对象内存在线程开始后分配,线程结束时回收且每个线程有该对象自己的实例,简单地说,线程局部存储的对象都是独立各个线程的。实际上这并不是一个新鲜个概念,虽然C++一直没因在语言层面支持它,但是很早之前操作系统就有办法支持线程局部存储了。下面是一个例子:
使用static
void test()
{
static int i = 0;
for (int j = 0;j<10;j++)
{
i++;
printf("i = %d\n",i);
}
}
int main()
{
thread t1(test);
t1.join();
thread t2(test);
t2.join();
system("pause");
return 0;
}
结果:
使用thread_local
void test()
{
thread_local int i = 0;
for (int j = 0;j<10;j++)
{
i++;
printf("i = %d\n",i);
}
}
结果: