善用__thread——每个线程都有一份独立实体
来源:互联网 发布:mac win8 无声音 编辑:程序博客网 时间:2024/06/14 20:42
一句话总结:__thread修饰的全局变量每个线程各有一份实体,互不影响。初始化值只能是编译期常量。
下面例子有两个变量,__thread修饰的变量不受线程时序影响,每个线程拿到的都是初始值;而int全局变量则不同,两个线程是并发运行的,哪一行代码谁前谁后不清楚,所以fun2()打印出的g_var的值可能是10也可能是11.
#include <iostream>#include <pthread.h>__thread int g_own_var = 20;int g_var = 10;void* fun1(void* arg){ g_var++; printf("fun1 g_var: %d\n", g_var); g_own_var++; printf("fun1 own_val: %d\n", g_own_var); return NULL;}void* fun2(void* arg){ printf("fun2 g_var: %d\n", g_var); printf("fun2 own_val: %d\n", g_own_var); return NULL;}int main(int argc, const char * argv[]) { // insert code here... pthread_t pid1, pid2; int res = pthread_create(&pid1, NULL, fun1, NULL); if(res!=0) { printf("Create pthread1 error!\n"); return -1; } res = pthread_create(&pid2, NULL, fun2, NULL); if(res!=0) { printf("Create pthread2 error!\n"); return -1; } pthread_join(pid1, NULL); pthread_join(pid2, NULL); return 0;}
阅读全文
0 0
- 善用__thread——每个线程都有一份独立实体
- Qt:用 __thread 关键字让每个线程有自己的全局变量
- 每个线程都有一个堆栈。
- 桑德兰王子会祝福每个战士都有一份不悔的爱情
- Windows是不是每个线程都有消息队列的问题
- 关于每个线程都有各自的errno的测试
- ocilib不是多线程安全的!每个线程都要有一个connection实体
- 设置线程堆栈大小 每个线程都有一个堆栈那么,这个堆栈多大呢?
- 每个线程都有它自己的一组C P U寄存器,称为线程的上下文
- 每个用户做独立的线程同步
- 每个线程都有一个堆栈那么,这个堆栈多大呢?
- Kettle7 ( Pentaho Data Integration )源码分析 每个step都有一个线程负责运行
- 每个生命都有自己的形状
- 每个程序员都有自己的规则
- 每个网站都有固定的域名
- 每个对象都有一个接口
- 每个程序员都有一个孩子
- 1.2:每个对象都有一个接口
- Sass入门一
- 比较两个java.util.Date 的日期(年月日)是否相同(忽略时、分、秒)的多种方法
- Java基础
- 使用腾讯云 GPU 学习深度学习系列之三:搭建深度神经网络
- Java判断两个时间是不是同一天
- 善用__thread——每个线程都有一份独立实体
- MySQL--01【MySQL 5.7新特性介绍】
- lintcode:比较字符串
- C语言main函数argc argv介绍
- 全面理解Java内存模型
- git使用笔记
- c++头文件结构
- Memcache未授权访问漏洞简单修复方法
- Android事件机制学习