当前位置: 首页 > 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.jsqmd.com/news/1104178/

相关文章:

  • 【NWFSP问题】麝牛算法MO求解零等待流水车间调度问题NWFSP【含Matlab源码 15685期】
  • Linux Wireless之WiFi Beacon Hint 流程分析
  • 9-LLTrack:用于二维多目标跟踪的并行关联框架
  • 告别繁琐,企业信息化一站式方案为你解忧!
  • 对称加密算法实战指南:从AES到SM4,原理、选型与安全实践
  • 内存芯片短缺致苹果多款产品提价,是无奈之举还是商业决策?
  • 腾讯、谷歌为 AI 发邮箱、钱包,安全与失控间人类还能犹豫多久?
  • 老牌顶刊跌下神坛,为何IF和分区双双“失守”?
  • 临沂家装对比参考:顶奢蜂窝板与市面普通板材差异解析
  • OpenTelemetry 多租户分流怎么做:按服务名路由 traces 的实战方案
  • ​​LangChain4j和LangGraph4j是合作还是竞品
  • openDeepWiki的新手如何操作
  • 三步打造个人数字图书馆:novel-downloader小说下载器终极指南
  • 大疆TSDK提取热红外图像(RJPG)温度信息,热红外图像转tiff或tif并用大疆智图或Pix4D拼接 | 热红外照片温度信息提取可处理1280x1024图像| 热红外温度图像处理-已打包成软件
  • 【毕业设计】基于智能推荐的卫生健康系统 SpringBoot+Vue 完整源码(含论文+数据库,可运行)
  • Grok 4.5私测,马斯克AI战略是转型还是出清?
  • 2026成都黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • EulerPublisher终极指南:如何一键发布openEuler云镜像到华为云、阿里云和AWS
  • VLC鼠标点击暂停插件:3分钟让你的视频控制更简单
  • 单片机串口环形缓冲区应该怎么写,或解析串口协议
  • 信息化项目的分类
  • java-基于ssm的一款房屋租赁管理系统
  • 基于交流潮流的电力系统多元件N-k故障模型研究(Matlab代码实现)【电力系统故障】
  • ESim电工制图图文介绍
  • 将“Git Bash Here“添加到windows11的新式右键菜单
  • Linux 系统编程 04:进程基础
  • 终极解决方案:一键捕获完整网页的Chrome扩展神器
  • PostgREST防SQL注入实战:从原理到纵深防御体系构建
  • STM32与LENA-R8构建低功耗高精度定位系统
  • 3分钟免费解锁全皮肤:R3nzSkin国服换肤终极指南