【Linux】线程篇Ⅱ:

news2024/12/27 9:58:01

线程Ⅱ

  • 🔗接上篇【线程篇Ⅰ】
  • 五、线程库 和 线程 id
  • 六、同步与互斥


🔗接上篇【线程篇Ⅰ】

👉【Linux】线程篇Ⅰ:线程和task_struct 执行流的理解、相关接口命令、线程异常、线程的私有和共享


五、线程库 和 线程 id

对于 Linux 目前实现的 NPTL 实现而言

pthread_t 类型的线程 ID,本质就是一个 进程地址空间 上的一个地址。

线程篇Ⅰ中涉及到的接口,主要是原生系统库的系统级解决方案,虽然在库中实现但是跟语言一样,比语言更靠近底层罢了。而 C++ 其实是对线程库做的封装!!

虽然原生接口效率更高,但是 语言接口 有跨平台性。不确定只在 Linux 下跑的还是推荐使用语言接口。

在这里插入图片描述

另:有如下 线程栈 的理解和应用
在这里插入图片描述

  • 通过更改 寄存器 ebp、esp 就能 切换 线程栈
  • 数据通过 ebp - 偏移量 进行访问或者开辟空间(ebp 是一个相对稳定的位置)
  • 首地址之所以是低地址,是因为栈的扩展方式 和 ebp 开辟空间的方式(如图)。
/*__thread*/ int g_val = 100;

void *threadRoutine(void* args)
{
    string name = static_cast<const char*>(args);
    int cnt = 5;
    while(cnt)
    {
    	// 局部变量
        cout << name << " : " << cnt-- << " : " << hexAddr(pthread_self()) << " &cnt: " << &cnt << endl;
        // 全局变量
        cout << name << " g_val: " << g_val++ << ", &g_val: " << &g_val << endl;
        sleep(1);
	}
	return nullptr;
}

int main()
{
	pthread_t t1, t2, t3;
	pthread_create(&t1, nullptr, threadRoutine, (void*)"thread 1");
	pthread_create(&t2, nullptr, threadRoutine, (void*)"thread 2"); 
	
	pthread_join(t1, nullptr);
	pthread_join(t2, nullptr);
	return 0
}
  • 线程函数中的 临时变量,储存在 进程地址空间 共享区的 线程库的 线程栈 中,线程各自使用互不影响。

  • 全局变量 储存在主线程的 已初始化数据段,其他新线程访问全局变量访问的是同一个,是并发访问。

  • 前面 声明 __thread (局部存储)字样的全局部变量 ,储存在已初始化数据段,并在产生新线程后,拷贝到 线程库的 线程局部存储段 中,供各自线程使用且互不影响。(由于地址空间的分布规则,全局数据被拷贝后的地址会比原来的地址大很多,如上图示)

      __thread 定义的全局变量 可以应用在:
      		带出某一个函数 被 各个线程调用的次数
    
  • __thread 局部存储 与 static 静态变量 没有关系哦,静态变量被所有线程共享的,存在已初始化数据段。


六、同步与互斥

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

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

相关文章

数藏平台遭到攻击怎么办?

数藏平台科技抢单以及DDoS攻击事件频发&#xff0c;造成服务器CPU耗尽&#xff0c;平台卡顿进不去&#xff0c;活动无法正常进行&#xff0c;攻击者入侵平台方数据库&#xff0c;恶意篡改账户余额&#xff0c;导致大量用户高价挂单仍可成交&#xff0c;最终导致数据异常&#x…

iFluor 594 Styramide是一种荧光染料,常用于生物分子标记和成像

试剂 | 基础知识概述&#xff08;部分&#xff09;: 中文名称&#xff1a;Alexa Fluor 594酪Styramide 分子量&#xff1a;1341.71 胺的优异替代品 100 Slides 英文名称&#xff1a;iFluor 594 Ex (nm)&#xff1a;588 Em (nm)&#xff1a;604 规格标准&#xff1a;1g&am…

docker快速上手运行js代码(dockerfile、镜像、容器、docker desktop图形化界面的基本使用、dockercompose)

1、导入&#xff1a; 1.1&#xff1a;准备js文件 我们本地有一个文件夹"docker_learn"&#xff0c;里面有一个index.js的文件&#xff0c;文件内只有一行代码 console.log("快速上手docker"); 1.2&#xff1a;运行js代码 我们使用vscode等ide打开这个…

pyqt5 多线程QThread自学记录

pyqt5多线程QThread自学记录 在编写qt的时候不加入多线程&#xff0c;运行程序往往会导致主进程卡死&#xff0c;比如执行下载某视频或者其他执行比较耗时的程序&#xff0c;泛滥了博客&#xff0c;就是没有理解怎么进行槽函数的关联和传递的 经过长时间的攻克&#xff0c;终于…

【附安装包】Dynaform 5.9.4安装教程

DYNAFORM是一款用于板料成形数值模拟的专用软件&#xff0c;是LS-DYNA求解器与ETA/FEMB前后处理器的完美结合&#xff0c;包含BSE、DFE、Formability三个大模块&#xff0c;几乎涵盖冲压模模面设计的所有要素&#xff0c;包括&#xff1a;定最佳冲压方向、坯料的设计、工艺补充…

界面设计软件都有哪些?推荐这7款

本文总结了7种“知名”软件界面设计工具&#xff0c;建议您尝试各种选择&#xff0c;以找到最适合您的UI设计工具。 对于UI设计师来说&#xff0c;应用程序的界面设计和制作是最常见的。面对设计师的需求&#xff0c;市场上出现了各种各样的软件界面设计工具&#xff0c;百花齐…

国标GB28181视频平台EasyGBS国标平台无法正常启动的问题解决方案

EasyGBS国标视频云服务是基于国标GB/T28181协议的视频能力平台&#xff0c;可实现的视频功能包括&#xff1a;实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#…

4-4 Representing text Exercise

本文所用资料下载 一. Representing text Let’s load Jane Austen’s Pride and Prejudice. We first split our text into a list of lines and pick an arbitrary line to focus on: with open(D:jane-austen/1342-0.txt, encodingutf8) as f:text f.read() lines text.…

UE4与pycharm联合仿真的调试问题及一些仿真经验

文章目录 ue4与pycharm联合仿真的调试问题前言ue4端的debug过程pycharm端 一些仿真经验小结 ue4与pycharm联合仿真的调试问题 前言 因为在实验中我需要用到py代码输出控制信息给到ue4中&#xff0c;并且希望看到py端和ue端分别在运行过程中的输出以及debug调试。所以&#xf…

uniapp打包ios

转载&#xff1a;如何将应用程序发布到 App Store_憧憬blog的博客-CSDN博客 憧憬blog主页 在强者的眼中&#xff0c;没有最好&#xff0c;只有更好。我们是移动开发领域的优质创作者&#xff0c;同时也是阿里云专家博主。 ✨ 关注我们的主页&#xff0c;探索iOS开发的无限可能&…

Mysql数据库迁移到达梦DM

因需求&#xff0c;原本使用的是mysql数据库&#xff0c;现要改为达梦数据库&#xff0c;顾记录迁移过程。 目录 一、下载DM连接工具https://www.dameng.com 二、迁移数据 三、迁移遇到的问题 一、下载DM连接工具https://www.dameng.com 下载安装好&#xff0c;会有如下图工…

8.23作业

设计一个Per类&#xff0c;类中包含私有成员&#xff1a;姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员&#xff1a;成绩、Per类对象 p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>u…

Ansible学习笔记(二)

3.ansible的使用示例&#xff08;playbook&#xff09; 1.创建mysql 账户和mysql 组的 playbook ---#create mysql user and group - hosts: allremote_user: roottasks:- name: create groupgroup: namemysql systemyes gid306- name: create useruser: namemysql systemyes…

学习左耳听风栏目90天——第八天 8/90(学习左耳朵耗子的工匠精神,对技术的热爱)【答疑解惑:渴望、热情和选择】

答疑解惑&#xff1a;渴望、热情和选择 如何抽出时间学习&#xff1f;1. 要热爱学习&#xff0c;渴望学习&#xff0c;从学习中获取快乐 如何抽出时间学习&#xff1f; 1. 要热爱学习&#xff0c;渴望学习&#xff0c;从学习中获取快乐

同名覆盖引发的问题

父子间的赋值兼容 子类对象可以当作父类对象使用 (兼容性) 子类对象可以直接赋值给父类对象子类对象可以直接初始化父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象 当使用父类指针 (引用) 指向子类对象时 子类对象退化为父类对象只能访问父类中定义的成…

(CVPR-2023)用于步态识别的动态聚合网络

用于步态识别的动态聚合网络 paper题目&#xff1a;Dynamic Aggregated Network for Gait Recognition paper是BIT发表在CVPR 2023的工作 paper地址&#xff1a;链接 Abstract 步态识别有利于多种应用&#xff0c;包括视频监控、犯罪现场调查和社会安全等。然而&#xff0c;步…

freertos之优先级实验

优先级的介绍 优先级的取值范围是&#xff1a;0~(configMAX_PRIORITIES – 1)&#xff0c;数值越大优先级越高。 FreeRTOS会确保最高优先级的、可运行的任务&#xff0c;马上就能执行。 对于相同优先级的、可运行的任务&#xff0c;轮流执行 任务的执行顺序 对于同优先级的任…

工作流程引擎之flowable(集成springboot)

0、背景 现状&#xff1a;公司各部门业务系统有各自的工作流引擎&#xff0c;也有cross function的业务在不同系统或OA系统流转&#xff0c;没有统一的去规划布局统一的BPM解决方案&#xff0c;近期由于一个项目引发朝着整合统一的BPM方案&#xff0c;特了解一下市面上比较主流…

spring之Spring Security - 实现身份验证与授权

Spring Security - 实现身份验证与授权 标题: Spring Security - 实现身份验证与授权摘要:引言:词汇解释:详细介绍:实现基本的身份验证与授权解释概念:代码示例:注意事项: 定制化认证与授权流程解释概念:代码示例:注意事项: 集成OAuth2认证解释概念:代码示例:注意事项: 总结:参…

【微信公众号】微信公众号网页授权:

文章目录 一、添加业务域名二、前端授权获取code【1】参数说明&#xff1a;【2】静默授权与显式授权的区别&#xff1a;【3】前端获取code的代码&#xff1a; 三、后端获取openid(或unionid)【1】获取openid&#xff1a;【2】获取unionid 四、unionid与openid的区别 在微信公众…