TLS(thread local storage)是指在程序中可以只声明一次变量,而提供给每个线程不同的拷贝,即每个线程使用相同的变量名得到不同的拷贝。在Linux平台中该类变量使用__thread来进行标识。
如以下程序:

 1 #include <stdio.h>
2 #include <pthread.h>
3
4 __thread int data = 1;
5
6 void *thread(void *d)
7 {
8         printf(“hello,thread data:%d\n”,++data);
9 }
10
11 int main(int argc, char *argv[])
12 {
13         pthread_t th1,th2;
14         printf(“hello world\n”);
15         pthread_create(&th1, NULL, thread, NULL);
16         pthread_create(&th2, NULL, thread, NULL);
17         pthread_join(th1, NULL);
18         pthread_join(th2, NULL);
19         return 0;
20 }

程序输出为:

$ ./thread_tls1
hello world
hello,thread data:2
hello,thread data:2

若去掉__thread则输出为:

$ ./thread_tls1
hello world
hello,thread data:2
hello,thread data:3

参考:
http://gcc.gnu.org/onlinedocs/gcc-3.3.1/gcc/Thread-Local.html
http://en.wikipedia.org/wiki/Thread-local_storage

Advertisements