__thread

__thread是GCC内置的线程局部存储设施,存取效率可以和全局变量相比。__thread变量每一个线程有一份独立实体,各个线程的值互不干扰。可以用来修饰那些带有全局性且值可能变,但是又不值得用全局变量保护的变量。

__thread使用规则:只能修饰POD类型(类似整型指针的标量,不带自定义的构造、拷贝、赋值、析构的类型,二进制内容可以任意复制memset,memcpy,且内容可以复原),不能修饰class类型,因为无法自动调用构造函数和析构函数,可以用于修饰全局变量,函数内的静态变量,不能修饰函数的局部变量或者class的普通成员变量,且__thread变量值只能初始化为编译器常量(值在编译器就可以确定const int i=5,运行期常量是运行初始化后不再改变const int i=rand()).

#include<iostream>
#include<pthread.h>
#include<unistd.h>
using namespace std;const int i = 5;
__thread int var = i;//两种方式效果一样
//__thread int var = 5;void* worker1(void* arg) 
{cout << ++var << endl;//输出 6
}void* worker2(void* arg) 
{sleep(1);//等待线程1改变var值,验证是否影响线程2cout << ++var << endl;//输出6
}int main() 
{pthread_t pid1, pid2;//__thread int temp=5;static __thread int temp = 10;//修饰函数内的static变量pthread_create(&pid1, NULL, worker1, NULL);pthread_create(&pid2, NULL, worker2, NULL);pthread_join(pid1, NULL);pthread_join(pid2, NULL);cout << temp << endl;//输出10return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/385189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eventfd(三)

1. 测试代码&#xff1a; //https://www.jianshu.com/p/d7ebac8dc9f8 #include <stdio.h> #include <unistd.h> #include <stdint.h> #include <pthread.h> #include <sys/eventfd.h> #include <sys/epoll.h>int event_fd -1;void *rea…

04-树4 是否同一棵二叉搜索树 (25 分)

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而&#xff0c;一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树&#xff0c;都得到一样的结果。于是对于输入的各种插入序列&#xff0c;你需要判断它们…

strtol,strtoll,strtoul, strtoull函数的使用

#include<stdlib.h> // 这个是C标准库&#xff0c;与linux无关。这套函数是通用 long int strtol(const char *nptr, char **endptr, int base); long long int strtoll(const char *nptr, char **endptr, int base); unsigned long int strtoul(const char *nptr, char …

eventfd(一)

函数原型&#xff1a; 创建的时候可以传入一个计数器的初始值initval。 第二个参数flags在linux 2.6.26之前的版本是没有使用的&#xff0c;必须初始化为0&#xff0c;在2.6.27之后的版本flag才被使用。 #include <sys/eventfd.h> int eventfd(unsigned int initval, in…

gettimeofday

作用&#xff1a;需要打印代码执行到某处的时间&#xff0c;或者需要计算程序执行的时间差&#xff08;精确到微妙级&#xff09;。这时会用到gettimeofday函数&#xff0c;它可以返回自1970-01-01 00:00:00到现在经历的秒数。 #include <sys/time.h> int gettimeofday(…

02-线性结构2 一元多项式的乘法与加法运算 (20 分

设计函数分别求两个一元多项式的乘积与和。 输入格式: 输入分2行&#xff0c;每行分别先给出多项式非零项的个数&#xff0c;再以指数递降方式输入一个多项式非零项系数和指数&#xff08;绝对值均为不超过1000的整数&#xff09;。数字间以空格分隔。 输出格式: 输出分2行&…

1066 图像过滤 (15 分)

图像过滤是把图像中不重要的像素都染成背景色&#xff0c;使得重要部分被凸显出来。现给定一幅黑白图像&#xff0c;要求你将灰度值位于某指定区间内的所有像素颜色都用一种指定的颜色替换。 输入格式&#xff1a; 输入在第一行给出一幅图像的分辨率&#xff0c;即两个正整数 M…

从零实现一个http服务器

如果GET请求带参数&#xff0c;那么一般是附加在请求的url后面&#xff0c;参数与参数之间使用&分割&#xff0c;例如请求http://www.hootina.org/index_2013.php?param1value1m2value2m3value3&#xff0c;我们看下这个请求组装的的http协议包格式&#xff1a; GET /ind…

1068 万绿丛中一点红 (20 分)

对于计算机而言&#xff0c;颜色不过是像素点对应的一个 24 位的数值。现给定一幅分辨率为 MN 的画&#xff0c;要求你找出万绿丛中的一点红&#xff0c;即有独一无二颜色的那个像素点&#xff0c;并且该点的颜色与其周围 8 个相邻像素的颜色差充分大。 输入格式&#xff1a; 输…

《个人项目学习指引》

1. 从零实现一个http服务器

1069 微博转发抽奖 (20 分)

小明 PAT 考了满分&#xff0c;高兴之余决定发起微博转发抽奖活动&#xff0c;从转发的网友中按顺序每隔 N 个人就发出一个红包。请你编写程序帮助他确定中奖名单。 输入格式&#xff1a; 输入第一行给出三个正整数 M&#xff08;≤ 1000&#xff09;、N 和 S&#xff0c;分别是…

【1】TCP三次握手的第三次的 ack包丢失会怎样?

面试题&#xff1a; 在 TCP 建立连接的三次握手连接阶段&#xff0c;如果客户端发送的第三个ACK包丢了&#xff0c;那么客户端和服务端分别进行什么处理呢&#xff1f; 相信了解 tcp 协议的人&#xff0c;三次握手的过程肯定很了解了。第三次的 ack 包丢失就是说在 client 端…

1070 结绳 (25 分

给定一段一段的绳子&#xff0c;你需要把它们串成一条绳。每次串连的时候&#xff0c;是把两段绳子对折&#xff0c;再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子&#xff0c;可以再次对折去跟另一段绳子串连。每次串连后&#xff0c;原来两段绳子的长度就会减…

动态规划目录

序号题目1 70. 爬楼梯

1071 小赌怡情 (15 分)

常言道“小赌怡情”。这是一个很简单的小游戏&#xff1a;首先由计算机给出第一个整数&#xff1b;然后玩家下注赌第二个整数将会比第一个数大还是小&#xff1b;玩家下注 t 个筹码后&#xff0c;计算机给出第二个数。若玩家猜对了&#xff0c;则系统奖励玩家 t 个筹码&#xf…

53. 最大子序和

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 进阶: 如果你已经实现…

1072 开学寄语 (20 分)

下图是上海某校的新学期开学寄语&#xff1a;天将降大任于斯人也&#xff0c;必先删其微博&#xff0c;卸其 QQ&#xff0c;封其电脑&#xff0c;夺其手机&#xff0c;收其 ipad&#xff0c;断其 wifi&#xff0c;使其百无聊赖&#xff0c;然后&#xff0c;净面、理发、整衣&am…

九大经典算法之插入排序、希尔排序

01 插入排序(Insertion Sort) 原理&#xff1a;每次选择一个元素&#xff0c;并且将这个元素和整个数组中的所有元素进行比较&#xff0c;然后插入到合适的位置。 void insertion_sort(int arr[], int n) {int i,j;for (i 1; i < n; i) {int tmp arr[i];for (j i; j >…

九大经典算法之冒泡排序、快速排序

03 冒泡排序(Bubble Sort) 每次选择两个元素&#xff0c;按照需求进行交换&#xff08;比如需要升序排列的话&#xff0c;把较大的元素放在靠后一些的位置&#xff09;&#xff0c;循环 n 次&#xff08;n 为总元素个数&#xff09;&#xff0c;这样小的元素会不断 “冒泡” 到…

1073 多选题常见计分法 (20 分)

批改多选题是比较麻烦的事情&#xff0c;有很多不同的计分方法。有一种最常见的计分方法是&#xff1a;如果考生选择了部分正确选项&#xff0c;并且没有选择任何错误选项&#xff0c;则得到 50% 分数&#xff1b;如果考生选择了任何一个错误的选项&#xff0c;则不能得分。本题…