首页/新闻资讯/正文详情

自学嵌入式Day29:Linux多线程控制(互斥锁、信号量与死锁)

发布时间:2026/11/14 19:20:47 来源:云帆数科 栏目:资讯中心
自学嵌入式Day29:Linux多线程控制(互斥锁、信号量与死锁)
目录一、线程互斥Mutex1. 核心概念2. 互斥锁的使用步骤3. 相关 API 函数4. 互斥锁的注意事项二、线程同步Semaphore1. 核心概念2. 互斥锁 vs 信号量重点区分3. 信号量的使用步骤4. 相关函数三、死锁Deadlock1. 什么是死锁2. 产生死锁的四个必要条件缺一不可一、线程互斥Mutex1. 核心概念临界资源在多线程中会被多个线程同时进行读写操作的资源如全局变量、文件、硬件设备等。互斥Mutual Exclusion在多线程中对临界资源的排他性访问。即同一时刻只能有一个线程访问该资源。2. 互斥锁的使用步骤定义锁 →→ 初始化锁 →→ 加锁 →→ 解锁 →→ 销毁锁3. 相关 API 函数使用互斥锁需包含头文件pthread.h。定义与初始化pthread_mutex_t mutex; // 定义互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr); // 功能初始化互斥锁。 // 参数attr 一般传 NULL表示默认属性。 // 返回值成功 0失败 非零。加锁int pthread_mutex_lock(pthread_mutex_t *mutex); // 功能加锁。加锁后的代码到解锁部分的代码属于“原子操作”。 // 如果 mutex 已经被其他线程锁住当前线程会在这里阻塞等待。原子操作在线程的一次调度中这段代码必须完成不能中途发生线程调度。解锁int pthread_mutex_unlock(pthread_mutex_t *mutex); // 功能解锁。解锁后代码不再排他访问。销毁int pthread_mutex_destroy(pthread_mutex_t *mutex); // 功能使用完毕后销毁锁释放资源。4. 互斥锁的注意事项谁加锁谁解锁互斥锁的加锁和解锁必须在同一个线程中进行。临界区要“短小精悍”在被互斥锁保护的代码段临界区内绝对不要执行休眠sleep或耗时极长的操作否则会导致其他线程长时间阻塞严重影响并发效率。二、线程同步Semaphore1. 核心概念同步有一定先后顺序的对资源的排他性访问。关系互斥包含同步同步是互斥的一个特例。2. 互斥锁 vs 信号量重点区分持有者互斥锁有持有者的概念谁加锁谁解锁信号量没有持有者可以由线程 A 释放、线程 B 申请th1 释放 th2th2 释放 th1交叉释放。临界区限制互斥锁保护的临界区不能休眠而信号量保护的区域适当可以有休眠或小的耗时操作。资源数互斥锁资源唯一信号量是计数信号量其初值可以大于 1适用于有多个相同资源的情况。3. 信号量的使用步骤定义信号量 →→ 初始化 →→ P/V 操作 →→ 销毁。4. 相关函数使用信号量需包含头文件semaphore.h。定义与初始化sem_t sem; // 定义信号量 int sem_init(sem_t *sem, int pshared, unsigned int value); // 功能初始化信号量。 // 参数pshared 0 表示线程间使用!0 表示进程间使用。 // value 是初始值。二值信号量(0 或 1)0表示红灯阻塞1表示绿灯通行。P/V 操作P 操作申请资源对应sem_wait()。如果有资源申请并执行sem sem - 1如果没有资源阻塞等待。int sem_wait(sem_t *sem);V 操作释放资源对应sem_post()。释放资源并执行sem sem 1不会阻塞。int sem_post(sem_t *sem);销毁int sem_destroy(sem_t *sem);三、死锁Deadlock1. 什么是死锁由于锁资源安排不合理申请和释放逻辑不对导致多个进程或线程互相等待对方释放资源从而无法继续执行推进的现象。2. 产生死锁的四个必要条件缺一不可这是计算机科学中非常经典的考点互斥条件一个资源每次只能被一个进程使用。请求与保持条件一个进程因请求资源而阻塞时对已获得的资源保持不放。不剥夺条件进程已获得的资源在未使用完之前不能强行剥夺。循环等待条件若干进程之间形成一种头尾相接的循环等待资源关系。破局之法我们在写代码时只要破坏上述四个条件中的任意一个例如规定所有线程按相同的顺序申请锁就可以避免死锁。

相关推荐

论文分享 | 固定翼无人机深失速栖停,NMPC 跟踪的稳定性从哪来?轨迹优化与时变终端设计
论文分享 | 固定翼无人机深失速栖停,NMPC 跟踪的稳定性从哪来?轨迹优化与时变终端设计

论文分享 | 具有稳定性保证的固定翼无人机深失速与栖停着陆轨迹跟踪 NMPC当固定翼无人机以大迎角进入深失速,并进一步以较低空速栖停在近地回收网上时,怎样规划可执行的着陆轨迹,同时保证轨迹跟踪过程中的状态约束、输入约束与闭环稳定性&… · 2026/11/15 4:32:33

C语言结构体:把一堆不同类型的数据打包在一起[特殊字符]
C语言结构体:把一堆不同类型的数据打包在一起[特殊字符]

写 C 语言的时候,char、int、float 这些都是基础类型。但现实世界中的信息往往是成套出现的:一个学生,有姓名、年龄、性别、学号;一本书,有书名、作者、价格。总不能单独定义一堆零散变量 name1、age1、sex1……&#… · 2026/11/10 9:37:31

LNP深度复盘:从技术原理到产业突围之路
LNP深度复盘:从技术原理到产业突围之路

2020年之后,几十亿剂mRNA疫苗让LNP(Lipid Nanoparticle,脂质纳米颗粒)从一个只在递送圈子里流通的专业词,变成了公共词汇。大众最先认识LNP,源于新冠mRNA 疫苗,但LNP的价值远不止疫苗载体。作为… · 2026/11/2 19:08:09

蔡甸区在哪里办电工证官方回应实操考试心里没底怕挂科
蔡甸区在哪里办电工证官方回应实操考试心里没底怕挂科

蔡甸区在哪里办电工证官方回应实操考试心里没底怕挂科 实操考试心里没底怕挂科?你不是一个人。尤其是对郑州的市政公用工程从业者来说, 蔡甸区在哪里办电工证… · 2026/11/15 12:27:25

梧州电工证在哪里复审多少钱别再乱花钱了
梧州电工证在哪里复审多少钱别再乱花钱了

梧州电工证在哪里复审多少钱别再乱花钱了 证书过期了不知道怎么复审延期,你是不是也遇到过这样的问题?别急,这篇文章专门讲梧州电工证复审流程、费用以及怎么避坑。如果你正好在找【梧州电工证在哪里复审多少钱】,那你来对地方了。… · 2026/11/15 12:27:25

电工证要盖章千万别踩坑:洛阳转岗电工如何高效备考
电工证要盖章千万别踩坑:洛阳转岗电工如何高效备考

电工证要盖章千万别踩坑:洛阳转岗电工如何高效备考 急需特种作业证才能上岗找工作,这话说得一点都不假。在洛阳,很多转岗的电工都因为“电工证要盖章”这件事被耽误了机会,甚至因此错失了面试机会。别以为这只是个形式问题,一旦操作不当,后果真的挺严重… · 2026/11/15 12:27:25

禹州市电工证怎么考,怎么报名全攻略,外省证能转过来吗
禹州市电工证怎么考,怎么报名全攻略,外省证能转过来吗

禹州市电工证怎么考,怎么报名全攻略,外省证能转过来吗 之前考的证在外省能不能转过来,这几乎是每个想在禹州市从事电工工作的人都会问的问题。如果你手里拿着的是外省的电工证,又或者正在考虑在禹州市报考,那么“ 禹州市电工证怎么考,怎么报名… · 2026/11/15 12:27:25

电工证怎么查询的?电子证书怎么下载?找工作必须知道的真相
电工证怎么查询的?电子证书怎么下载?找工作必须知道的真相

电工证怎么查询的?电子证书怎么下载?找工作必须知道的真相 急需特种作业证才能上岗找工作,但你可能还在为电工证怎么查询的发愁,甚至不知道电子证书怎么下载。别急,今天我从安阳项目现场管理员的角度,告诉你电工证怎么查询的,以及电子证书的下载流程,… · 2026/11/15 12:27:25

焦炉工人属于特种工吗?含金量高吗?别交完培训费白费
焦炉工人属于特种工吗?含金量高吗?别交完培训费白费

焦炉工人属于特种工吗?含金量高吗?别交完培训费白费 怕考不过白交培训费?很多人在报名特种作业证书时都犯愁,特别是像焦炉工人这类岗位, 含金量 到底如何?今天咱们就来聊聊焦炉工人是否属于特种工,以及怎么考、怎么学、怎么不被坑。… · 2026/11/15 12:26:24

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

长春初级电工证怎么考?通过率揭秘全在这里
长春初级电工证怎么考?通过率揭秘全在这里

长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50

国内电工证报考条件与考试时间
国内电工证报考条件与考试时间

低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50

电工作业时如何断电?电子证书到底能不能全国通用?
电工作业时如何断电?电子证书到底能不能全国通用?

电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 1:51:20

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 4:02:19

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/15 3:02:05

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码