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

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

相关推荐
郝学胜-神的一滴3 小时前
Python 鸭子类型:优雅的多态哲学,让代码更自由
linux·服务器·开发语言·python·网络协议
草莓熊Lotso3 小时前
Python 入门必吃透:函数、列表与元组核心用法(附实战案例)
大数据·服务器·开发语言·c++·人工智能·python·qt
feng_you_ying_li4 小时前
linux之重定向原理与缓冲区基本介绍
linux
雷工笔记4 小时前
MES 系统 设备保养管理模块详细设计方案
运维·数据库
晚风_END6 小时前
Linux|操作系统|zfs文件系统的使用详解
linux·运维·服务器·数据库·postgresql·性能优化·宽度优先
科研前沿11 小时前
镜像视界 CameraGraph™+多智能体:构建自感知自决策的全域空间认知网络技术方案
大数据·运维·人工智能·数码相机·计算机视觉
暴力求解11 小时前
Linux---线程基础
linux·运维·服务器
JAVA面经实录91711 小时前
计算机基础(完整版·超详细可背诵)
java·linux·数据结构·算法
晚风_END11 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发