【Linux:线程锁】

news2024/12/23 0:54:19

目录

锁的接口:

​编辑 关于锁的几个问题:

从底层实现理解锁: 


 

锁的接口:

  • pthread_mutex_lock函数申请锁成功后,会返回,申请失败,函数不返回,继续申请,线程阻塞
  • pthread_mutex_t是一个互斥锁类型
  • 锁如果是全局或者静态的,只需要init
  • 锁如果是局部的,就需要destroy
  • 锁的使用本意是为了保护临界资源

 关于锁的几个问题:

  • 加锁的范围,粒度(代码量)尽量小
  • 任何线程进入临界资源都需要申请锁,锁没有申请成功会阻塞
  • 加锁的过程是原子性的
  • 原子性:在编译时,只有一行编译语言
  • 线程申请锁成功后,执行临界资源的代码时,能够被切换,但其他线程依旧无法进入临界资源

从底层实现理解锁: 

  • CPU的寄存器只有一套,被所有线程共享,但数据可以有多套,寄存器中的数据属于执行流的上下文数据,是执行流的私有数据
  • CPU在执行代码时,一定有对应的执行载体
  • 数据在内存中被所有的数据共享
  • 因此,把数据从内存移动到cpu寄存器中,本质就是把数据从共享变成线程私有

 举个例子,有两个线程,命名为A,B,内存中的临界资源加锁后,lock加锁后为0,未加锁即为1,寄存器中的数据设为0

  • 当A线程执行时,会先move 清空寄存器中的内容,再把寄存器和内存中的数据进行交换
  • 当寄存器中的内容>0会直接返回,但此时A线程被切换了,B进程进来运行。
  • A线程切换的同时也会带走自己的数据,等A线程被切换回来时又会重新加载这部分数据
  •  B进程也对寄存器先进行清理,确保寄存器干净,再对寄存器和内存(此时内存中,lock存放的为1)进行交换,再判断。
  • 寄存器中内容<0,线程B只好挂起等待
  • 等线程A执行完毕后,线程B 又重新执行,则拿取到数据

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

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

相关文章

python33_数字格式化

数字格式化 数字格式输出说明3.1415926{:.2f}3.14保留小数点后两位3.1415926{:.2f}3.14带符号保留小数点后2位3.1415926{:.0f}3不带小数&#xff0c;但是会四舍五入5{:0>2d}05数字补0&#xff0c;填充左边&#xff0c;宽度为25{:x<4d}5xxx数字补x&#xff0c;填充右边&a…

IPv6 DAD和地址解析实验

实验目的 1、 观察并分析IPv6 DAD过程 2、 观察并分析IPv6地址解析过程 实验拓扑 实验步骤 1、观察并分析IPv6 DAD过程 在AR1的G0/0/0开启抓包。AR1的G0/0/0接口配置ipv6地址2012::1/64。在接口配置ipv6地址后&#xff0c;ipv6有一段称为Tentative生命期&#xff0c;在该阶…

Sql Server 生成脚本中的快速删除空行问题

使用 Sql Server 生成脚本&#xff0c;例如生成存储过程&#xff0c;常常会因为存在大量没用的空行。如下图5w行的脚本&#xff0c;空行很多无用&#xff0c;需要删除。 手动删除很麻烦&#xff0c;想通过快捷方法删除这些空行&#xff0c;方法其实很简单&#xff01; 1、使用…

Vue集成echarts实现统计图表

目录 一、概述 二、Vue实现echarts图表模版 三、测试运行项目 一、概述 官网地址&#xff1a;https://echarts.apache.org/examples/zh/index.html 目前的官网的echarts例子比较古老&#xff0c;如果集成Vue里面需要进行修改&#xff0c;所以可以新建一个Vue的项目代码&am…

不同类型的 LLM 有什么区别

LLM 有不同类型的模型&#xff0c;例如 Base 和 Instruct&#xff0c;他们有什么区别呢&#xff0c;Base 模型是基于原始语料进行训练的模型&#xff0c;生成结果时会持续生成&#xff0c;直到达到最大长度。而指令模型是经过问答数据集进行训练的&#xff0c;回答是会根据上下…

【AI大模型】关于ToB垂直领域大模型的一点探索和尝试

本文分享了物流技术团队在垂直领域大模型开发和部署过程中的技术细节、挑战解决策略以及实际应用案例。 ‍ 背景 大家好&#xff0c;我们是淘天物流技术团队&#xff0c;在过去一年多的实践工作中&#xff0c;我们团队围绕“物流体验”这一垂直领域&#xff0c;尝试通过垂直…

大坝渗流监测设备——渗压计

渗压计是一种用于监测大坝等水工建筑物渗流压力的重要设备&#xff0c;其准确性和可靠性对于保障大坝安全运行至关重要。南京峟思将为大家详细介绍渗压计的工作原理、安装方法及其在大坝渗流监测中的应用。 渗压计主要利用振弦频率的变化来测量渗透水压力。设备由透水部件、感应…

使用UDP网络型灯光协议控制器控制DMX512步进电机

目录 1、硬件介绍 &#xff08;1&#xff09;灯光控制器 &#xff08;2&#xff09;步进电机 &#xff08;3&#xff09;接线图 &#xff08;4&#xff09;多路步进电机DMX接线 2、调试软件测试 &#xff08;1&#xff09;软件界面 &#xff08;2&#xff09;控制器ip地…

今夜无眠!Model 2来猎杀国产新能源了

文 | AUTO芯球 作者 | 雷慢 10月11日国内新能源车企注定会有一个不眠夜&#xff0c; 为什么啊&#xff0c;马斯克已经放出狠话了&#xff0c; 10月10日&#xff08;美东时间&#xff09;的发布会“将载入史册”&#xff0c; 别不信啊&#xff0c;据说这次会发布三款车&…

AI测试入门:向量数据库 知识图谱的适用场景

AI测试入门:向量数据库 & 知识图谱的适用场景 1. 向量数据库概述2. 知识图谱概述3. 适用场景分析3.1 使用向量数据库的场景3.2 使用知识图谱的场景4. 案例分析4.1 搜索引擎中的应用4.2 医疗健康领域的应用4.3 社交媒体平台中的应用4.4 供应链管理中的应用总结1. 向量数据库…

其他浏览器可以联网,但edge不能联网

问题描述&#xff1a; 今早edge无法上网&#xff0c;检测网络连接正常&#xff0c;而且其他chrome&#xff0c;Firefox和360浏览器都可以上网。 解决方案&#xff1a; 注意&#xff1a;为防止是代理问题&#xff0c;可以在扩展中禁用后再试试 如果没有代理或者禁用代理也不…

AIOps探索 | AI与人类协作:未来IT运维应急响应的新模式

内容来源于--布博士&#xff08;擎创科技产品解决方案专家&#xff09; 在科技日新月异的今天&#xff0c;人工智能&#xff08;AI&#xff09;如同一场汹涌澎湃的浪潮&#xff0c;席卷着各个行业领域&#xff0c;IT 运维应急响应也正站在这一变革的风口浪尖。随着信息技术架构…

为什么越来越多的男性开始光顾美容机构?美业管理系统/个案疗愈系统源码

近年来&#xff0c;我们可以清晰地观察到一个明显的趋势&#xff1a;越来越多的男性开始光顾医美美容机构。这种现象的出现并非偶然&#xff0c;而是由多种因素共同作用的结果。 本文将结合社会观念的转变、媒体和广告的影响、职业发展压力、技术进步以及自我关注和健康意识的…

基于非线性干扰观测器的六自由度机械臂控制

1.观测器公式推导 当存在扰动时&#xff0c;机械臂的动力学方程如下&#xff1a; 对上式进行恒等变化得&#xff1a; 设计干扰观测器&#xff1a; 令&#xff0c;则&#xff1a; 观测误差满足 &#xff0c;取&#xff0c;因加速度不可测&#xff0c;定义辅助向量&#xff1a; …

爬虫工具——Fidder的安装

一、Fidder的安装 出现这样的界面就是安装成功了 二、Fiddler的配置 1.端监听手机端设置 但是如果你想要对手机上的app进行抓包怎么办呢&#xff0c;那么你还需要进行以下操作&#xff1a; 首先你的Fiddler所在的电脑和手机必须处在同一个局域网内(即连着同一个路由器)。 …

【MySQL 10】索引

目录 1.初始索引 1.1索引概念 1.2常见索引分类 1.3 见一下索引&#xff08;案例&#xff09; 2.关于物理磁盘 2.1见一下物理磁盘 2.2 了解磁盘的存储结构 2.3对磁盘的逻辑结构进行抽象 4.磁盘随机访问与连续访问 5.MySQL表与磁盘 3. MySQL 与磁盘的交互 3.1MySQL 与…

中国市场的NFT生存法则:消费属性与圈子文化

自2021年NFT数字藏品概念爆发以来&#xff0c;它迅速吸引了全球范围内的玩家、投资者以及艺术家和品牌的参与。然而&#xff0c;随着市场逐渐冷却&#xff0c;尤其是在中国市场&#xff0c;NFT的定位变得越来越微妙和复杂。在全球其他地区&#xff0c;NFT逐渐走向金融化&#x…

开源2+1链动S2B2C商城小程序下社区团长的社群温度营造与商业价值实现

摘要&#xff1a;本文聚焦于社区团长在社群运营中的角色&#xff0c;阐述在开源21链动S2B2C商城小程序的背景下&#xff0c;社区团长如何通过多种角色互动营造社群温度&#xff0c;进而实现商业价值中的复购增长等目标&#xff0c;分析其中的作用机制、面临的挑战及应对策略。 …

数据结构-八大排序之基数排序

基数排序&#xff08;RadixSort&#xff09; 1. 理论知识&#xff1a; 1.1 原理&#xff1a; 定义0-9 十个桶 (数组&#xff09;&#xff0c;先排序个位&#xff0c;再排序十位&#xff0c;排序百位... 1.2 例子&#xff1a; ①根据最大值确定需要执行多少遍&#xff08;这里…

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗&#xff1f;使用Python编程&#xff0c;你可以创造出独一无二的爱心图案&#xff0c;为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码&#xff0c;让你的创意和情感通过代码展现出来。 话不多说&#xff0c;咱…