__thread 关键字的解释:
 
Thread Local Storage 
线程局部存储(tls)是一种机制,通过这一机制分配的变量,每个当前线程有一个该变量的实例.
gcc用于实现tls的运行时模型最初来自于IA-64处理器的ABI,但以后被用到其它处理器上。
它需要链接器(ld),动态连接器(ld.so)和系统库(libc.so,libpthread.so)的全力支持.因此它不是到处可用的。
注意:__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 关键字的示例代码的更多相关文章

  1. jQuery中读取json文件示例代码

    json文件是一种轻量级的数据交互格式.一般在jquery中使用getJSON()方法读取,具体示例代码如下,感兴趣的朋友可以参考下哈,希望可以帮助到你   json文件是一种轻量级的数据交互格式.一 ...

  2. Dynamics 365 CE的插件/自定义工作流活动中调用Web API示例代码

    微软动态CRM专家罗勇 ,回复325或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! 现在Web API越来越流行,有时候为了程序更加健壮,需要在插件 ...

  3. asp.net后台cs中的JSON格式变量在前台Js中调用方法(前后台示例代码)

    //后台cs代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using ...

  4. linux日志中查找关键字、前几行、结尾几行,Linux的find用法示例

    linux在日志中查找关键字.前几行.结尾几行,Linux的find用法示例 1.linux在日志中查找关键字.前几行.结尾几行 1.1查看日志 前 n行: 1.2查看日志 尾 n行: 1.3根据 关 ...

  5. php示例代码之类似于C#中的String.Format方法

    php示例代码之类似于C#中的String.Format方法 原文来自于  http://stackoverflow.com/questions/1241177/c-string-format-equ ...

  6. Android中悬浮窗口的实现原理和示例代码

    用了我一个周末的时间,个中愤懑就不说了,就这个问题,我翻遍全球网络没有一篇像样的资料,现在将实现原理简单叙述如下: 调用WindowManager,并设置WindowManager.LayoutPar ...

  7. SQL Server中Table字典数据的查询SQL示例代码

    SQL Server中Table字典数据的查询SQL示例代码 前言 在数据库系统原理与设计(第3版)教科书中这样写道: 数据库包含4类数据: 1.用户数据 2.元数据 3.索引 4.应用元数据 其中, ...

  8. [转] VS2015中跑OpenGL红宝书第八版的第一章示例代码,运行

    Ori Article Link OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资 ...

  9. VS2015中跑OpenGL红宝书第八版的示例代码

    OpenGL的东西快忘光了,把角落的第八版红宝书拿出来复习一下 从书中的地址下了个示例代码结果新系统(Win10+VS2015)各种跑不起来,懊恼之后在网上疯狂搜索资料终于跑起来了,记录一下 一.环境 ...

随机推荐

  1. UOJ#395. 【NOI2018】你的名字 字符串,SAM,线段树合并

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ395.html 题解 记得同步赛的时候这题我爆0了,最暴力的暴力都没调出来. 首先我们看看 68 分怎么做 ...

  2. VBS教程

    Vbs是一种Windows脚本,它的全称是:Microsoft Visual Basic Script Editon.(微软公司可视化BASIC脚本版),VBS是Visual Basic的的一个抽象子 ...

  3. asp+SqlServer2008开发【第一集:安装SqlServer2008以及登陆】

    参考:https://blog.csdn.net/i_likechard/article/details/75299983 1,安装sqlServer2008的具体步骤参考网上其他教程,自己根据注释引 ...

  4. webpack报错需要合适的loader

    以前做vue项目都好好的,最近做react,公共配置感觉加个jsx就可以了吧,然而不是这样的. 一.问题描述 You may need an appropriate loader to handle ...

  5. 数字图像特征提取之HOG特征

    1.灰度化:(以便可以使用sobel等算子计算梯度)2.gamma校正: (降低光照影响)3.求每个像素的梯度和方向: (利用任意一种梯度算子,例如:sobel,laplacian等,对该patch进 ...

  6. 关于在虚拟机上安装ubuntu输入不了中文的问题

    打开终端后,无法输入中文,按照网络上的教程 1.安装语言包 System Settings–>Language Support–>Install/Remove Languages 选中ch ...

  7. 重构file_get_contents实现一个带超时链接访问的函数

    function wp_file_get_contents($url, $timeout = 30) { $context = stream_context_create(array( 'http' ...

  8. [LeetCode] Swap Adjacent in LR String 交换LR字符串中的相邻项

    In a string composed of 'L', 'R', and 'X' characters, like "RXXLRXRXL", a move consists of ...

  9. Javascript Date类型

      Date 类型使用自 UTC 1970 年 1 月 1日 午夜 开始经过的毫秒数来保存日期.   创建日期对象 var now = new Date();//获取当前日期   Date.parse ...

  10. snmp简单测试

    一.环境搭建 搜索windows Server2003安装配置snmp 服务,按照提示来就行 二.利用 1.找出Coummunity Strings 利用于 auxiliary/scanner/snm ...