__thread关键字

原创 2013年11月03日 09:04:29

     __thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。

       __thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内容可以复原),不能修饰class类型,因为无法自动调用构造函数和析构函数,可以用于修饰全局变量,函数内的静态变量,不能修饰函数的局部变量或者class的普通成员变量,且__thread变量值只能初始化为编译器常量(值在编译器就可以确定const int i=5,运行期常量是运行初始化后不再改变const int i=rand()).

 

#include<iostream>
#include<pthread.h>
#include<unistd.h>
using namespace std;
const int i=5;
__thread int var=i;//两种方式效果一样
//__thread int var=5;//
void* worker1(void* arg);
void* worker2(void* arg);
int main(){
    pthread_t pid1,pid2;
    //__thread int temp=5;
    static __thread  int temp=10;//修饰函数内的static变量
    pthread_create(&pid1,NULL,worker1,NULL);
    pthread_create(&pid2,NULL,worker2,NULL);
    pthread_join(pid1,NULL);
    pthread_join(pid2,NULL);
    cout<<temp<<endl;//输出10
    return 0;
}
void* worker1(void* arg){
    cout<<++var<<endl;//输出 6
}
void* worker2(void* arg){
    sleep(1);//等待线程1改变var值,验证是否影响线程2
    cout<<++var<<endl;//输出6
}
程序输出:

6

6         //可见__thread值线程间互不干扰

10

每天进步一点点——Linux中的线程局部存储(二)

Linux C/C++多线程编程中请善用__thread
  • cywosp
  • cywosp
  • 2014年05月24日 22:51
  • 6517

C++ new关键字深入理解

“new”是C++的一个关键字,同时也是操作符。关于new的话题非常多,因为它确实比较复杂,也非常神秘,下面我将把我了解到的与new有关的内容做一个总结。 new的过程 当我们使用关键字new在堆上动...
  • bbs375
  • bbs375
  • 2016年11月17日 16:28
  • 1191

C++ 深入理解 auto 关键字

auto类型变量——根据初始值推断真实的数据类型。本文将从,【为什么auto】【auto代码使用示例】【auto概念详解】【auto注意事项】【register/auto的比较分析】【auto类型(普...
  • u013630349
  • u013630349
  • 2015年07月23日 15:29
  • 2280

Thread 状态及volatile关键字作用join方法的使用

线程状态 Thread.State 1 Thread.State BLOCKED 阻塞状态Thread state for a thread blocked waiting for a monito...
  • qq85469769
  • qq85469769
  • 2017年11月16日 10:00
  • 41

GCC关键字__thread

最近,在一些代码中发现了个很有意思的关键字——__thread。在多线程编程中,这个关键字算是很有作用的。虽然很有用,不过该关键字是GCC编译器提供的,因此如果考虑到跨平台的情况下,就需要谨慎考虑了。...
  • huangjh2017
  • huangjh2017
  • 2017年07月08日 15:08
  • 210

线程局部变量__thread关键字

__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比.__thread变量每一个线程有一份独立实体,各个线程的值互不干扰,可以用来修饰那些带有全局性且值可以变,但是又不值的用全局...
  • whoamiyang
  • whoamiyang
  • 2017年01月03日 15:34
  • 299

Thread和Runable的区别、Synchronized锁关键字

一、Thread和Runable的区别 Thread是基类,子类必继承他实现其run方法。其也是实现了Runable接口。Thread是普通的类,并非抽象类或者密封类等。Runnable是接口,...
  • qq373036876
  • qq373036876
  • 2016年04月11日 17:56
  • 162

Thread和Runable的区别、Synchronized锁关键字

一、Thread和Runable的区别 Thread是基类,子类必继承他实现其run方法。其也是实现了Runable接口。Thread是普通的类,并非抽象类或者密封类等。Runnable是接口,...
  • Gxy1115029725
  • Gxy1115029725
  • 2016年10月09日 21:05
  • 120

rt_thread_nano_stm32f30x

  • 2017年12月25日 17:20
  • 632KB
  • 下载

多线程thread

  • 2017年11月06日 00:18
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:__thread关键字
举报原因:
原因补充:

(最多只允许输入30个字)