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

【Linux系统编程】多线程并发:POSIX 信号量(无名有名)+信号量版生产者-消费者

发布时间:2026/11/8 4:24:04 来源:云帆数科 栏目:资讯中心
【Linux系统编程】多线程并发:POSIX 信号量(无名有名)+信号量版生产者-消费者
一、前言前面我们学完了 互斥锁、读写锁、条件变量。我们知道- 互斥锁保证同一时刻只有一个线程访问临界资源保证数据安全​- 条件变量让线程不再空轮询、主动阻塞休息极大节省 CPU 资源。但条件变量存在一个致命缺陷条件变量没有计数器如果 pthread_cond_signal 发出唤醒信号时没有线程正在 wait 阻塞本次唤醒会直接丢失、永久失效。后续线程再来等待时不会收到任何之前的通知程序逻辑极易错乱。为了解决 “唤醒丢失” 问题Linux 引入了 POSIX 信号量。信号量自带计数器事件可以被保存、堆积、不会丢失是比条件变量更稳定的同步工具。二、什么是 POSIX 信号量信号量本质是一个自带计数器的同步工具。核心只有两种操作- P 操作sem_wait申请资源计数器--资源不足则阻塞​- V 操作sem_post释放资源计数器唤醒阻塞线程根据使用场景分为两类1. 无名信号量 sem_t内存级信号量多用于 线程间同步​2. 有名信号量文件级信号量多用于 进程间同步三、无名信号量API注意初始化信号量的参数int sem_init(sem_t *sem, int pshared, unsigned int value);1要想在进程间共享无名信号量必须位于共享内存区域内。2对于线程间共享的信号量线程组退出了无名信号量也就不复存在了。3无名信号量初始化以后就可以像操作有名信号量一样操作无名信号量了。4value:信号量初始值value1:二值信号量类似互斥锁 value1:计数信号量5pshared: 用于声明信号量是在线程间共享还是在进程间共享。0 表示在线程间共享非零值则表示信号量将在进程间共享。6return: 成功返回0失败返回-1四、有名信号量API五、示例代码结果发现生产者线程连续生产了3个产品之后full_num的值为2而不是设想的3,原因是并发编程中典型的“竞态时序”问题在多线程环境下消费者A执行完sem_post(信号量1)之后还没有来得及printf sem_getvalue这一步cpu的时间片又立马被线程B抢走了线程B执行sem_wait(信号量-1)这时候线程A再来printf就是“过时”的数据了。这个现象说明sem_getvalue这种函数绝对不能用来做同步控制的逻辑判断它无法严格追踪实时状态。真正的同步必须完全依赖sem_wait和sem_post这种原子操作。

相关推荐

火锅底料、辣椒酱的 “渣感“ 与 “分层“,根源往往不在细度
火锅底料、辣椒酱的 “渣感“ 与 “分层“,根源往往不在细度

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

告别盲目埋点!分享一套能支撑决策的定制化埋点体系
告别盲目埋点!分享一套能支撑决策的定制化埋点体系

埋点体系是什么?为什么很多企业越埋越乱?如何使用 OSM 模型和 UJM 模型搭建一套能支撑决策的埋点体系?如何通过指标共创机制统一口径、规范化落地埋点方案?本文将结合 GrowingIO 定制化埋点体系的实践进行解答分析。 一、什么是埋… · 2026/11/7 17:33:18

AI 视频成片质量检查:从脚本到导出定位四类问题
AI 视频成片质量检查:从脚本到导出定位四类问题

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

特种作业操作证书页怎么转异地郑州报考避坑指南
特种作业操作证书页怎么转异地郑州报考避坑指南

特种作业操作证书页怎么转异地郑州报考避坑指南 急需特种作业证才能上岗找工作,你不是一个人。现在越来越多的河南水利工程从业者,尤其是那些准备跨省发展的,都面临一个实际问题—— 特种作业操作证书页… · 2026/11/8 4:23:20

低压电工证去哪里报名在哪考?新手必看的报考全攻略
低压电工证去哪里报名在哪考?新手必看的报考全攻略

低压电工证去哪里报名在哪考?新手必看的报考全攻略 你急需特种作业证才能上岗找工作,却不知道低压电工证在哪考?别急,这篇文章给你讲清楚。 在河南,很多转岗的电工、维修工、建筑工人都面临着一个问题: 低压电工证去哪里报名… · 2026/11/8 4:23:20

低压电工证去哪里报名内部消息告诉你,报名前先搞清这些事
低压电工证去哪里报名内部消息告诉你,报名前先搞清这些事

低压电工证去哪里报名内部消息告诉你,报名前先搞清这些事 怕考不过白交培训费?这年头连考个低压电工证都得睁大眼,稍不留神就掉进培训机构的坑里。别急,我这有个 内部消息 ,能帮你少走弯路,省下几千块培训费。… · 2026/11/8 4:23:20

尚志市电工证复审多少钱?外省证能转过来吗?手把手教你避坑
尚志市电工证复审多少钱?外省证能转过来吗?手把手教你避坑

尚志市电工证复审多少钱?外省证能转过来吗?手把手教你避坑 之前考的证在外省能不能转过来?这是很多电工朋友在复审时最关心的问题。特别是从河南、山东、河北等省份过来的电工,手里拿着的证是外地的,到了尚志市后,能不能直接复审? 多少钱… · 2026/11/8 4:23:20

应急厅 电工证培训机构怎么选
应急厅 电工证培训机构怎么选

应急厅电工证怎么考?真实经历告诉你学历不高也能报上名 你是不是也担心自己学历不高,考不了应急厅电工证?其实,很多人一开始也和你一样,觉得学历不够,考不上证,连报名资格都达不到。但我的一个朋友,初中毕业,现在已经是驻马店一家劳务班组的负责人,… · 2026/11/8 4:23:20

林州电工证在哪里报名 值不值得考
林州电工证在哪里报名 值不值得考

林州电工证在哪里报名 值不值得考 实操考试心里没底怕挂科,这几乎是每个想报考林州电工证的学员心里最真实的声音。别急,这篇文章就是为了解决你的焦虑,告诉你林州电工证到底值不值得考,怎么考,考完怎么用,以及那些你可能忽略的细节。… · 2026/11/8 4:22:20

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20

双极步进电机控制实战: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/7 11:25:08

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/7 12:02:18

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/8 1:18:25

了解更多?预约专属演示

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

企业微信二维码