POSIX信号量操作全解析

一.POSIX信号量

POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。但 POSIX可以用于线程间同步。

头文件:

cpp 复制代码
#include <semaphore.h>

下面给大家介绍一下POSIX信号量的操作方法

1.初始化 sem_init

cpp 复制代码
int sem_init(sem_t *sem, int pshared, unsigned int value);

参数:

  • sem:指向信号量对象的指针

  • pshared:

    • 0:线程间共享(同一进程)

    • 非0:进程间共享(需要共享内存区域)

  • value:信号量初始值(0 或正数)

返回值:

  • 0:成功

  • -1:失败,设置 errno

2. 销毁sem_destory

cpp 复制代码
int sem_destroy(sem_t *sem);

参数:

  • sem:要销毁的信号量

返回值:

  • 0:成功

  • -1:失败,设置 errno

3. 等待(P操作,减1)

cpp 复制代码
int sem_wait(sem_t *sem);

参数:

  • sem:信号量指针

返回值:

  • 0:成功

  • -1:失败,设置 errno

行为:

  • 信号量值 > 0:减1,立即返回

  • 信号量值 = 0:阻塞等待

4. 发布(V操作,加1)

cpp 复制代码
int sem_post(sem_t *sem);

参数:

  • sem:信号量指针

返回值:

  • 0:成功

  • -1:失败,设置 errno

行为:

  • 信号量值加1

  • 如果有线程等待,唤醒其中一个

相关推荐
未济5 天前
linux 配置环境变量
linux
傲世仙尊5 天前
目录即文件-Ext文件系统收尾篇
linux·c语言
虎头金猫5 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
_艾伦 耶格尔.5 天前
进程间通信
linux
AI职业加油站5 天前
AI智能体应用工程师证书:政策红利下的职业新风口
大数据·运维·人工智能·学习·职场发展
Liuqy-055 天前
Linux IO编程——静态库、动态库
linux
此冬歌咏5 天前
K8s 节点故障实战:优雅驱逐 31 秒,硬故障 331 秒,以及那个永远 Pending 的 Pod
运维·k8s
彧azz5 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
-梅5 天前
linux(8) 软硬链接
linux·运维·服务器
Wang's Blog5 天前
Java 项目实战: 外卖平台-文件下载与ServletOutputStream回写浏览器
服务器·项目开发