c++新特性: 线程局部变量, 关键字thread_local

有3种类型: 以名字空间作为作用域, 类的静态数据成员,  普通局部变量

thread_local int tt=2; //1.  以namespace作为作用域
class X
{
    static thread_local int i; //2.  类的静态数据成员
};

void fun()
{
    thread_local int j; //3.  普通的线程局部变量
}

类的静态数据成员(2.)和namespace为作用域(1.)的变量:

初次使用之前完成构造, 可能是在变量初次使用才构造, 或者线程启动之时就构造,  总之无法保证使用前就已构造好

普通的线程局部变量(3.):

当流程第一次到达该变量时才构造, 如果函数从没调用, 函数内却声明了线程局部变量, 则不会发生构造, 如图静态局部变量一样( ?调用了函数却没执行声明语句呢?)

线程局部变量和静态局部变量一样, 先进行0值初始化, 再进行动态初始化(非0值初始化和非常量初始化之外), 如果线程局部变量的构造函数抛出异常, 程序就会完全终止

如果线程从exit退出, 线程局部变量会被销毁, 但其他线程的线程局部变量仍保留不析构

不同线程里, 线程局部变量的地址不同, 可以通过取值地址传递给其他线程, 但要保证线程结束变量销毁后,  其他线程不能再对其访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值