gcc 中__thread 关键字的示例代码
线程局部存储(tls)是一种机制,通过这一机制分配的变量,每个当前线程有一个该变量的实例.
注意:__thread 前面是两个_别闹错哦;
#include<iostream>
#include<pthread.h>
#include <unistd.h>
#define D "-----------------------------------------"
using namespace std; static __thread int a=; void *thread1(void *arg);
void *thread2(void *arg); int main()
{
pthread_t pid,pid1; pthread_create(&pid,NULL,thread1,NULL);
pthread_create(&pid1,NULL,thread2,NULL); pthread_join(pid,NULL);
pthread_join(pid,NULL); cout<<"main_a="<<a<<"\t"<<"addr_a="<<&a<<endl; } void *thread1(void *arg)
{
cout<<"I am thread1"<<endl;
cout<<"a="<<a<<"\t"<<&a<<endl;
sleep();
a=;
cout<<"thread1->a="<<a<<"\t"<<"add_a="<<&a<<endl;
cout<<D<<endl;
return NULL;
}
void *thread2(void *arg)
{ cout<<"I am thread2"<<endl; cout<<"a="<<a<<"\t"<<&a<<endl;
a=;
cout<<"thread2->a="<<a<<"\t"<<"add_a="<<&a<<endl;
cout<<D<<endl;
return NULL;
}
执行结果:
zn@zn:~$ ./a.out
I am thread2
a= 0x7f7912b4a6fc
thread2->a= add_a=0x7f7912b4a6fc
-----------------------------------------
I am thread1
a= 0x7f791334b6fc
thread1->a= add_a=0x7f791334b6fc
-----------------------------------------
main_a= addr_a=0x7f79144b473c
分析:
该程序为了测试这个关键字的作用;
介绍一下程序,
首先在一开始定义一个全局变量a=12,其次声明连个线程的回调函数这两个函数作用,
用于先打印一下a的值然后再改变在打印a的值,至于为什么这样做,是想验证一下他是不是写时拷贝,
然后主程序就是开辟两个线程并等待其完成最后再打印一下a的值及地址来确定主线程是否有影响;
最终分析:
通过结果我们可以看到这个关键字作用是,只要其他线程用它他会直接在自己的线程栈上创建该对象并保留其原有的值;
不会干扰其他线程中的该值;
gcc 中__thread 关键字的示例代码的更多相关文章
- jQuery中读取json文件示例代码
json文件是一种轻量级的数据交互格式.一般在jquery中使用getJSON()方法读取,具体示例代码如下,感兴趣的朋友可以参考下哈,希望可以帮助到你 json文件是一种轻量级的数据交互格式.一 ...
- Dynamics 365 CE的插件/自定义工作流活动中调用Web API示例代码
微软动态CRM专家罗勇 ,回复325或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 现在Web API越来越流行,有时候为了程序更加健壮,需要在插件 ...
- asp.net后台cs中的JSON格式变量在前台Js中调用方法(前后台示例代码)
//后台cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...
- linux日志中查找关键字、前几行、结尾几行,Linux的find用法示例
linux在日志中查找关键字.前几行.结尾几行,Linux的find用法示例 1.linux在日志中查找关键字.前几行.结尾几行 1.1查看日志 前 n行: 1.2查看日志 尾 n行: 1.3根据 关 ...
- php示例代码之类似于C#中的String.Format方法
php示例代码之类似于C#中的String.Format方法 原文来自于 http://stackoverflow.com/questions/1241177/c-string-format-equ ...
- Android中悬浮窗口的实现原理和示例代码
用了我一个周末的时间,个中愤懑就不说了,就这个问题,我翻遍全球网络没有一篇像样的资料,现在将实现原理简单叙述如下: 调用WindowManager,并设置WindowManager.LayoutPar ...
- SQL Server中Table字典数据的查询SQL示例代码
SQL Server中Table字典数据的查询SQL示例代码 前言 在数据库系统原理与设计(第3版)教科书中这样写道: 数据库包含4类数据: 1.用户数据 2.元数据 3.索引 4.应用元数据 其中, ...
- [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行
Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...
- VS2015中跑OpenGL红宝书第八版的示例代码
OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...
随机推荐
- sql面试总结
http://blog.csdn.net/a379850992/article/details/55655495
- 【转】【数据结构】【有n个元素依次进栈,则出栈序列有多少种】
卡特兰数 大神解释:https://blog.csdn.net/akenseren/article/details/82149145 权侵删 原题 有一个容量足够大的栈,n个元素以一定的顺序 ...
- 关于eclipse配置tomcat时,console打印成功消息,但是不能成功访问页面的问题
解决方法:在首选项中配置tomcat后,为项目添加runtime后,在左下方的选项中,选择中间一项即可 重启发布,就可以正常访问了
- 大数据项目之_15_电信客服分析平台_01&02_项目背景+项目架构+项目实现+数据生产+数据采集/消费(存储)
一.项目背景二.项目架构三.项目实现3.1.数据生产3.1.1.数据结构3.1.2.编写代码3.1.3.打包测试3.2.数据采集/消费(存储)3.2.1.数据采集:采集实时产生的数据到 kafka 集 ...
- 同时使用antd和css module
同时编译antd和css module,需要设置两次less识别. { test: /\.less$/, exclude: path.resolve(__dirname, './node_module ...
- C++ log4cplus 类库的封装
对 log4cplus 库的封装,修改自网路 LogUtils.h /* * LogUtils.h * * Created on: 2018年8月9日 * Author: oftenlin */ #i ...
- golang str 首字母大写
首字母大写 //如果是小写字母, 则变换为大写字母 func strFirstToUpper(str string) string { if len(str) < 1 { return &quo ...
- /var/spool/clientmqueue目录~清理
今天nagios报警,一台服务器的disk满了,使用du -sh * 或 du -sh /* 查看目录的大小,查找占用空间大的目录/var/spool/clientmqueue.... 然后我就想/v ...
- python mysql 单表查询 多表查询
一.外键 变种: 三种关系: 多对一 站在左表的角度: (1)一个员工 能不能在 多个部门? 不成立 (2)多个员工 能不能在 一个部门? 成立 只要有一个条件成立:多 对 一或者是1对多 如果两个条 ...
- [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
1.在vs编写时出现这个问题(以下为网络查询结果) 问题的原因是“SSL: CERTIFICATE_VERIFY_FAILED”. Python 升级到 2.7.9 之后引入了一个新特性,当使用url ...