news 2026/7/1 18:52:26

记录Linux线程(信号量函数)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
记录Linux线程(信号量函数)

1. 初始化信号量:sem_init
int sem_init(sem_t *sem, intpshared, unsigned intvalue);
参数
sem:指向要初始化的信号量变量地址sem_t 是信号量的类型
pshared:共享范围
传 0:线程间共享(最常用),信号量在当前进程的内存中,仅本进程内线程可见。
传非 0:进程间共享,信号量需放在共享内存中,供多个亲缘进程使用。
value:信号量的初始值
互斥场景设为 1(等价于互斥锁)
同步场景设为 0(用于等待事件触发)
资源计数场景设为资源总数(如限制并发数)


2. 销毁信号量:sem_destroy

int sem_destroy(sem_t *sem);
功能:释放信号量占用的系统资源。
注意事项:
必须确保没有线程阻塞在该信号量上时再销毁,否则行为未定义。
销毁后的信号量不能直接使用,必须重新调用 sem_init 初始化后才能再次使用。


3. P 操作(申请资源 / 阻塞等待)
P 操作会将信号量值减 1,根据信号量当前值的不同,分为三个版本:
阻塞版:sem_wait(最常用)
int sem_wait(sem_t *sem);
若信号量值 > 0:立刻将值减 1,函数返回。
若信号量值 = 0:调用线程阻塞挂起,直到信号量值变为 > 0,再执行减 1 并返回。


非阻塞版:sem_trywait
int sem_trywait(sem_t *sem);
若信号量值 > 0:减 1 成功,返回 0。
若信号量值 = 0:不阻塞,立刻返回 -1,errno 置为 EAGAIN。
适用于不能阻塞的场景,获取失败可以去做其他任务。


超时版:sem_timedwait
int sem_timedwait(sem_t *sem, const struct timespec *abs_timeout);
若在超时时间内获取到信号量,减 1 成功返回 0。
超过指定时间仍未获取到,返回 -1,errno 置为 ETIMEDOUT。

4. V 操作(释放资源 / 唤醒等待)
int sem_post(sem_t *sem);
功能:将信号量的值原子性加 1。
如果当前有线程阻塞在该信号量上,会唤醒其中一个等待的线程。
该操作是原子操作,不会出现竞态问题,且可以在信号处理函数中安全调用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/1 18:51:25

DOPE-NHS 二油酰基磷脂酰乙醇胺-活性酯 产品合成工艺解析

化学名称:1,2-二油酰基-sn-甘油-3-磷脂酰乙醇胺-N-羟基琥珀酰亚胺酯 英文名称:1,2-Dioleoyl-sn-glycero-3-phosphoethanolamine-N-hydroxysuccinimide esterxi an瑞.禧.小编总结的结构特征与功能定位DOPE-NHS 由两部分构成:高膜融合活性的 DO…

作者头像 李华
网站建设 2026/7/1 18:48:06

按需上门率99%!申通这家五星网点凭“电商基因”突围苏北

在快递竞争白热化的苏北市场,申通快递建湖县网点交出一份硬核成绩单:日均处理量超过7万件,稳居本地市场头把交椅。更特别的是,这个五星网点由一支做了十余年电商的团队操盘——坚决不打价格战,拒绝“以罚代管”&#x…

作者头像 李华
网站建设 2026/7/1 18:46:25

【吉林工程技术师范学院本科毕业论文】基于Spring Boot的防诈骗警民交流防护网站的设计与实现

注:仅展示部分文档内容和系统截图,需要完整的视频、代码、文章和安装调试环境请私信up主。学生的技术与实现摘 要随着信息技术的快速发展,电信网络诈骗手段不断翻新,给公众财产安全与社会稳定带来严重威胁。传统防诈骗警民交流防…

作者头像 李华
网站建设 2026/7/1 18:46:03

Go+DeepSeek-V3构建企业级代码审计系统

1. 项目概述:为什么企业需要一个“能自己看代码”的审计系统最近三个月,我帮三家不同行业的客户落地了代码审计自动化系统,其中两家是金融类中型科技公司,一家是做工业软件的SaaS服务商。他们共同的痛点不是“没工具”&#xff0c…

作者头像 李华
网站建设 2026/7/1 18:36:36

AI for EDA(开源汇总)

目前还没有单一开源项目能完全替代 Synopsys/Cadence 的全套商业 AI EDA 流程,但开源社区已形成"开源 EDA 底座 AI Agent/模型层"的组合方案,部分模块已可对标本商业工具的 AI 功能。以下按对标维度整理:一、AI Agent 框架 对标 …

作者头像 李华