理解线程库和线程排斥(锁)

news2024/12/24 11:37:12

理解线程库

线程要有独立属性 a.独立栈结构 b.寄存器中的上下文

在进程地址库内,维护栈的设备只有一套,如何保证线程都有独立栈?

每个新线程的栈由库维护,库会在堆上开辟一段空间。

默认地址空间的栈由主线程使用

如何理解pthread库来管理线程?

库要被使用,就要被页表映射到进程空间地址中的共享区的

当另一个进程创建线程时,由于pthread动态库也称共享库,另一个进程的所有线程由同一个库管理,依次可得,所有的线程都由一个共享库管理的

 

当另一个线程想要拿到另一个线程的退出信息,只需要知道他的phread_t类似于下标,再通过pthead_join(pthread_t,&ret)得到

thread id与LWP不匹配,pthread_id是什么?

pthread_id是线程属性集合在库中的地址。

线程局部存储是什么?

我们已经知道全部变量是线程共享的

__thread 再全局变量前添加,每个执行流一人一份,该值会被拷贝到线程的局部储存内  

gettid()得到tid

__thread pid_t lwp=0; __thread string name;(容器没办法拷贝)

站在语言级别理解pthread

#include<thread>封装了Linux的pthread库

自己实现封装?

tips1:类内成员函数的参数由于thsi无法匹配 解决方法:将this传入运行函数,将它改为静态方法

 

 

 

 

线程中可以自己fork吗?可以进行程序替换吗?

可以fork,可以替换,但是是将整个进程替换,可能影响其他线程,建议创建子进程去进行程序替换

线程互斥

互斥:任何时刻,互斥保证有且只有一个执行流进入临界区

任何一个时刻,只允许一个线程访问的资源叫做临界资源,将访问临界资源的代码叫做临界区

背景:并发访问同一份资源是很容易出现访问数据不一致的问题

例子:抢票

 

为什么出现了负数?

出现数据不一致的问题。多执行流并发的访问了资源,可能当一个线程A执行1--时,被CPU剥离下来,寄存器记录上下文,此时另一个线B程进入,由于第一个进程A的ticket并没有返回给内存,B进程认为ticket还是1,没执行--,它直接被CPU剥离下来,记录上下文,然后A线程被CPU运行,恢复A的上下文之后,对1--,对内存返回0,最后B进程被CPU运行,它去访问共享资源时,得到的是0,再对0--,出现了负数问题。

也就是说,可能在执行判断时,放进来了3,4个线程,去执行--,导致出现负数

原子性:要么完成,要么未完成,默认执行一条编译语句叫原子性

例:int cnt=10; cnt ++;

 

if(ticket>0) 也不是原子的,至少两个编译语句,一句从内存中取到CPU,一句做判断

解决方法:加锁

创建全局锁

pthread mutex t mutex= PTHREAD MUTEX INITIALIZER

锁有了并且已经被初始化了,这个锁位为全局锁

创建局部锁

​pthread t mutex;

pthread mutex init(&mutex,nullptr);​

用完之后销毁

pthread mutex destroy(&mutex);

认识接口

 

 

我们要尽可能的给少的代码加锁

加锁过多会使多线程访问变成单线程访问,多线程也就没有意义。

一般加锁都是给临界区加锁

 

由于为全局锁,所有线程都可访问,那么多线程访问这把锁是安全的吗?

安全,因为申请锁是原子性的。

锁在任何时刻只允许一个线程访问临界资源,也就是说任何时刻只允许一个线程去申请锁,那么必然会有申请锁失败的线程,那些失败的线程如何处理呢?

阻塞线程,等别的线程释放锁。

一个线程在访问临界区资源的时候,可不可能被CPU切换?

可能,完全允许,只是无法进入到加了锁的临界区内,被申请锁阻塞

多线程运行同一份资源,有线程无法持有锁,无法抢到票

这种情况叫线程的饥饿问题,解决饥饿问题,需要将线程按一定顺序进行

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

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

相关文章

SpringBoot框架下体育馆管理系统的构建

1引言 1.1课题背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理&#xff0c;这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制&#xff0c;不仅提高了工作效率&#xff0c;而且大大的提高了其…

被Karpathy誉为“蕴藏着类似ChatGPT的机会的AI产品Notebook LM”,它到底做对了什么?

就在昨天&#xff0c;Karpathy在X上连续发布了多条安利帖&#xff0c;强烈地给大家推荐一个AI产品NotebookLM。 嘶&#xff5e;给周围人疯狂种草并不稀奇&#xff0c;但Karpathy的推荐理由给NotebookLM戴了一个高帽子-他提到这款产品让人联想到ChatGPT。 这种就令人好奇&#…

线性模型到神经网络

&#x1f680; 在初始神经网络那一节&#xff08;链接如下&#xff1a;初始神经网络&#xff09;的最后&#xff0c;我们通过加大考虑的天数使得我们最后得到的模型Loss最终停留在了0.32k&#xff0c;当我们在想让模型更加准确的时候&#xff0c;是做不到的&#xff0c;因为我们…

论文的研究工具有什么?推荐5款AI论文写作网站

在当今的学术研究和写作领域&#xff0c;AI工具已经成为不可或缺的助手。这些工具不仅能够提高写作效率&#xff0c;还能帮助研究者生成高质量的论文。以下是一些值得推荐的AI论文写作工具&#xff1a; 千笔-AIPassPaper 千笔-AIPassPaper是一款基于深度学习和自然语言处理技…

太速科技-FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡

FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡 一、板卡概述 该子卡是高速AD9172 DAC和AD9689 ADC的FMC板。为客户提供高达2 GHz 的可用模拟带宽以及 JESD204B 接口&#xff0c;以快速地对各种宽带 RF 应用进行原型制作。 AD芯片AD9689&#xff0c;AD9689-2…

【技能提升get!技术策划进阶指南】

** 技能提升get&#xff01; 技术策划进阶指南 ** 技术策划扮演着游戏开发团队中的关键角色,需要在复杂的系统中找到最优的技术方案。 本文将全面介绍技术策划的职位定义、日常工作、重要作用以及成长路径,让大家全方位了解这个影响游戏质量的重要岗位。 点击蓝链领取游戏…

golang小项目1-家庭收支记账系统

项目地址&#xff1a;golang小项目 参考资料&#xff1a;尚硅谷golang教程P229 家庭收支记账系统 1. 系统简介 1.1 项目背景 在现代社会中&#xff0c;家庭的财务管理显得尤为重要。随着生活成本的不断上升&#xff0c;家庭需要有效地记录和分析收支情况&#xff0c;以确保…

【Linux】进程概念-2

文章目录 1.环境变量1.1 基本概念1.2 常见环境变量1.3 查看环境变量方法1.4 测试PATH1.5 测试HOME1.6 和环境变量相关的命令1.7 环境变量的组织方式1.8 通过代码如何获取环境变量1.9 通过系统调用获取或设置环境变量1.10 环境变量通常是具有全局属性的 1.环境变量 1.1 基本概念…

李宏毅机器学习2023-HW10-Adversarial Attack

文章目录 TaskBaselineFGSM (Fast Gradient Sign Method (FGSM)I-FGSM(Iterative Fast Gradient Sign Method)MI-FGSM(Momentum Iterative Fast Gradient Sign Method)M-DI2-FGSM(Diverse Input Momentum Iterative Fast Gradient Sign Method) Reportfgsm attackJepg Compress…

【LeetCode HOT 100】详细题解之链表篇

LeetCode HOT 100题解之链表篇 160 相交链表题目分析代码 206 反转链表方法一&#xff1a;迭代 234 回文链表方法一&#xff1a;将值复制到数组中方法二&#xff1a;快慢指针 141 环形链表方法一&#xff1a;哈希表方法二&#xff1a;快慢指针 142 环形链表II方法一&#xff1a…

读代码UNET

这个后面这个大小怎么算的&#xff0c;这参数怎么填&#xff0c;怎么来的&#xff1f; 这是怎么看怎么算的&#xff1f; 这些参数设置怎么设置&#xff1f;卷积多大&#xff0c;有什么讲究&#xff1f;

机器学习:opencv--摄像头OCR

目录 前言 一、三个函数 1.显示图像 2.点排序 3.透视变换 二、代码实例 1.打开摄像头 2.图像预处理 3.检测特定轮廓 4.对轮廓进行处理 5.释放资源 前言 摄像头OCR指的是利用摄像头捕捉图像中的文字信息&#xff0c;并通过光学字符识别&#xff08;OCR&#xff09;技…

遥感图像文本检索

遥感图像文本检索是一种通过自然语言描述&#xff0c;从大量遥感图像中搜索与之相关的图像的技术。它用于遥感解释任务中&#xff0c;帮助用户根据文字描述快速找到符合条件的遥感图像&#xff0c;这在城市规划、环境监测、灾害管理等领域具有重要应用意义。 实现这一技术的核…

【刷点笔试面试题试试水】#ifndef和#ifdef有什么区别?

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: #include <iostream> using namespace std;#define DEBUGint…

828华为云征文|华为云Flexus X实例性能实测:速度与稳定性的完美结合

828华为云征文&#xff5c;华为云Flexus X实例性能实测&#xff1a;速度与稳定性的完美结合 前言一、Flexus云服务器X实例介绍1.1 Flexus云服务器X实例简介1.2 Flexus云服务器X实例特点1.3 Flexus云服务器X实例使用场景 二、实践环境介绍2.1 本次实践环境规划2.2 本次实践介绍 …

828华为云征文|华为云Flexus云服务器X实例部署——盲盒抽奖商城系统以及编译发布小程序

盲盒抽奖商城系统使用 thinkphp6.0 uniapp 开发&#xff0c;做到了全移动端兼容。一个系统不仅可以打包 小程序 还可以 打包APP &#xff0c;H5 华为云Flexus云服务器X实例在安装搭建盲盒商城小程序方面具有显著优势&#xff0c;这些优势主要体现在以下几个方面&#xff1a; …

OpenGL ES 着色器(5)

OpenGL ES 着色器(5) 简述 着色器是在GPU上运行的程序&#xff0c;它会对每一个点都执行一次程序&#xff0c;并且计算出每个像素需要渲染的颜色&#xff0c;我们主要关注着色器的怎么传递数据&#xff0c;在OpenGL ES中&#xff0c;着色器传递数据分几种场景&#xff0c;一种…

软件设计师——计算机网络

&#x1f4d4;个人主页&#x1f4da;&#xff1a;秋邱-CSDN博客☀️专属专栏✨&#xff1a;软考——软件设计师&#x1f3c5;往期回顾&#x1f3c6;&#xff1a;&#x1f31f;其他专栏&#x1f31f;&#xff1a;C语言_秋邱 一、OSI/ RM七层模型(⭐⭐⭐) ​ 层次 名称 主要功…

Jetbrains 推出 CodeCanvas:云开发时代的未来已来

人们不大愿意相信事实 只愿意相信故事 你信仰什么 就会怎样生活 近期 jetbrains 悄悄的推出了新的产品 CodeCanvas&#xff0c;这个产品的推出具有划时代的意义。 CodeCanvas 的定位是一个云 IDE 。想一想 jetbrains 从 2000 年开始就专注于 IDE 的开发&#xff0c;准确来说是…

计算机毕业设计 二手图书交易系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…