当前位置: 首页 > news >正文

记录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。
如果当前有线程阻塞在该信号量上,会唤醒其中一个等待的线程。
该操作是原子操作,不会出现竞态问题,且可以在信号处理函数中安全调用。

http://www.gsyq.cn/news/1616149.html

相关文章:

  • Linux Wireless之WiFi Beacon Hint 流程分析
  • 对称加密算法实战指南:从AES到SM4,原理、选型与安全实践
  • 老牌顶刊跌下神坛,为何IF和分区双双“失守”?
  • 9-LLTrack:用于二维多目标跟踪的并行关联框架
  • OpenTelemetry 多租户分流怎么做:按服务名路由 traces 的实战方案
  • 三步打造个人数字图书馆:novel-downloader小说下载器终极指南
  • Grok 4.5私测,马斯克AI战略是转型还是出清?
  • ESim电工制图图文介绍
  • Linux 系统编程 04:进程基础
  • 3分钟免费解锁全皮肤:R3nzSkin国服换肤终极指南
  • 贾扬清从英伟达离职,7 亿美元收购一年告终,AI Infra 赛道面临挑战
  • 深度解析SDINBDA6-128G-ZA1:闪迪128GB车规级eMMC 5.1存储芯片
  • 嵌入式交流群
  • 大宅门中式建筑,已按人物标准升高修改
  • 产业园区两轮车乱象难治理?观芯AI摄像头专项实测方案
  • 案例分析:100GigE高速相机的出现助力创新生物医学诊断
  • MC6470与TM4C1299NCZAD的硬件协同与6DOF数据融合实战
  • Vibe Coding 避坑指南:3 张提示词模板,把烂尾率从 80% 打下来
  • 2026滁州黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • Resource 体系纵深实战:构建动态模板化代码片段的资源服务器
  • 为什么你的IDEA多模块项目永远跑不通?揭秘被官方文档隐藏的6个IDEA专属Maven生命周期陷阱
  • 美国公司弃 Claude 选 DeepSeek:成本降了,性能还提升了!
  • Momenta港股招股:营收三年翻三倍,65%市占率能否成物理AI时代定义者?
  • Go+DeepSeek-V3构建企业级代码审计系统
  • 高分Panel复现系列|三元突变比例图:从三组比例到三角坐标映射
  • 2026年食品行业PLM系统实施路径:从需求梳理到平台落地的关键步骤
  • 薄膜沉积CVD/PVD/ALD怎么选:一文看懂适用场景
  • 【Java】Java永久代:从诞生到终结的演进史
  • 该原标题存在营销诱导词,不符合要求,若按照关键词“重罪辩护”生成趋势洞察型标题,可改为:2026年重罪辩护行业趋势洞察:策略与挑战并存
  • 2026最新AI论文工具全解析,从新手到高手的进阶必备攻略