Linux进程间通信(IPC) - 信号量

一、什么是信号量

信号量的作用主要是用于进程间信息的同步和互斥,保证临界区的数据的访问顺序不被打乱,信号量主要的目的并不是传数据,而是保护临界区数据在访问时的完整性。信号量本质上就是一个非负的正整数计数器,对信号量可以执行P(获取),V(释放)的操作,当信号量值大于0的时候,执行P操作的时候就能获取到信号量,每获取到一次信号量的时候就对会对计数器减1操作。当信号量的值等于0的时候,P(获取)信号量的操作就会阻塞,无法获取信号量,不能访问临界区数据,直到有进程执行的V(释放)操作才行,释放信号量其实就是将信号量的值加1。总之P操作就是对信号量值减1,V操作就是对信号量值加1,当信号量值等于0的时候P操作被阻塞。当我们控制信号量的值不大于1的时候,这时候的信号量称之为二值信号量(0/1信号量),可以用作互斥操作,和mutex互斥锁的效果一样。

二、信号量的类型

Linux系统为我们提供了两种信号量:内核信号量和应用用户态信号量。用户态信号量又分为两种: POSIX信号量 和 SYSTEM V信号量。其中POSIX信号量还有命名信号量和无名信号量的区分。命名信号量-信号值保存在文件中,可以用作在进程和线程间同步。无名信号量-信号值保存在内存中,只能用作线程间同步。SYSTEM V信号量可以在不同的独立进程间进行通信。

三、SYSTEM  V 信号量介绍

        这是一个信号量的集合,不是单个信号量,要包含以下头文件 <sys/ipc.h> 和 <sys/sem.h>,一般我们使用的就是单个信号量,所以在使用的过程中,信号量索引一定是传0。

API介绍:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深耕嵌入式

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值