线程局部存储 Thread Local Storage(tls),是一种机制,通过这一机制分配的变量,每个当前线程有一个该变量的实例。
在用户层,用一个新的存储类型关键字:__thread
表示这一扩展。
__thread
使用规则:
__thread
限定符可以单独使用,也可带有 extern
或 static
限定符,但不能带有其它存储类型的限定符。#include <stdio.h>
#include <pthread.h>
static __thread int var = 5;
void *worker1()
{
++var;
printf("worker1,var is: %d,address is: %p\n", var, &var);
}
void *worker2()
{
sleep(3);
++var;
printf("worker2,var is: %d,address is: %p\n", var, &var);
}
int main()
{
pthread_t t1, t2;
pthread_create(&t1, NULL, worker1, NULL);
pthread_create(&t2, NULL, worker2, NULL);
pthread_join(t1, NULL);
pthread_join(t2, NULL);
return 0;
}
输出:
worker1,var is: 6,address is: 0x7f21d75236fc
worker2,var is: 6,address is: 0x7f21d6d226fc
可以看出每个线程中变量地址不相同,互相之间没有影响。
原文:https://www.cnblogs.com/xiaojianliu/p/14690310.html