合肥中山医院叶凡,山西万荣事件真相,色欲之死 完整版
thread_local
可以和static
与 extern
关键字联合使用,这将影响变量的链接属性(to adjust linkage)。例子:
#include <iostream> #include <thread> struct s { s() { printf("s() called i=%d\n", i); } int i = 0; }; //thread_local s gs; s gs; void foo() { gs.i += 1; printf("foo %p, %d\n", &gs, gs.i); } void bar() { gs.i += 2; printf("bar %p, %d\n", &gs, gs.i); } int main() { std::thread a(foo), b(bar); a.join(); b.join(); }
执行结果:结构体s只生成了一个对象实例,并且2个线程是共享这个实例的,可以看出实例的内存地址相同
s() called i=0 bar 0x55879165501c, 2 foo 0x55879165501c, 3
如果把:s gs;加上thread_local关键字,
thread_local s gs;
执行结果:结构体s在每个线程中都生成了一个实例,可以看出实例的内存地址不相同。
s() called i=0 bar 0x7f23eb2506f8, 2 s() called i=0 foo 0x7f23eba516f8, 1
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
如何在没有core文件的情况下用dmesg+addr2line定位段错误
用QT制作3D点云显示器——QtDataVisualization
网友评论