__thread:在多线程变成中,使用于global变量,使每个线程都私有一份。
  
  
    
  
  
  
   
 
 
 
 
 
 
 
  
  
  
  
    
static __thread int count;
 void *function1(void *argc)
 {
 printf("porgran pid:%u, the function1 pthread id is %lu, count:%d\n",getpid(), pthread_self(), count);
 count = 10;
 printf("porgran pid:%u, last the function1 pthread id is %lu, count:%d\n",getpid(), pthread_self(), count);
 return 0;
 }
 void *function2(void *argc)
 {
 printf("porgran pid:%u, the function2 pthread id is %lu, count:%d\n", getpid(), pthread_self(), count);
 sleep(2);
 count = 100;
 printf("porgran pid:%u, last the function2 pthread id is %lu, count:%d\n", getpid(), pthread_self(), count);
 return 0;
 }
 int main()
 {
 pthread_t  thread_id[2];
 int ret;
 pthread_t mian_thread_id;
 mian_thread_id = pthread_self();
 count = 2;
 printf("porgran pid:%u, mian_thread_id:%lu, count:%d\n", getpid(), mian_thread_id, count);
 ret = pthread_create(thread_id, NULL, function1, NULL);
 assert(ret == 0);
 ret = pthread_create(thread_id + 1, NULL, function2, NULL);
 assert(ret == 0);
 ret = pthread_join(thread_id[0], NULL);
 assert(ret == 0);
 ret = pthread_join(thread_id[1], NULL);
 assert(ret == 0);
 count = 1000;
 printf("porgran pid:%u, last mian_thread_id:%lu, count:%d\n", getpid(), mian_thread_id, count);
 return 0;
 }
 
 __typeof__(var) 是gcc对C语言的一个扩展保留字,用于声明变量类型,var可以是数据类型(int, char*..),也可以是变量表达式。
 
define DEFINE_MY_TYPE(type, name) __thread __typeof__(type) my_var_##name
 DEFINE_MY_TYPE(int, one); //It   is   equivalent   to  '__thread int  my_var_'; which is a thread variable.
 int main()
 {
 __typeof__(int *) x; //It   is   equivalent   to  'int  *x';
 __typeof__(int) a;//It   is   equivalent   to  'int  a';
 __typeof__(*x)  y;//It   is   equivalent   to  'int y';
 __typeof__(&a) b;//It   is   equivalent   to  'int  b';
 __typeof__(__typeof__(int *)[4])   z; //It   is   equivalent   to  'int  *z[4]';
 y = *x;
 b = &a;
 z[0] = x;
 z[1] = &a;
 return 0;
 }