Linux 进程间通信之-POSIX 信号量

信号量根据实现分为System V 信号量 与POSIX 信号量 两种。这里就不在赘述什么是信号量【https://baike.baidu.com/item/linux进程间信号量/4211510】了,也有很多文章介绍了他们的概念,本文主要介绍

POSIX 信号量与POSIX的一些不同之处。

一、POSIX 信号量的优势与不足

POSIX 信号量比System V信号量优越的地方:性能更好。System v信号量每次操作信号量必然会从用户态陷入到内核态频繁的加、解锁时间上的开销是很可观的。POSIX 信号量只要不存真正的两个线程竞争一把锁的情况,那么修改信号量就只是用户态的操作,并不会牵扯到内核。

POSIX 信号量创建和初始化合二为一,解决了system v中可能出现的竞争条件问题POSIX信号量的修改值的接口一次只能修改一个信号值,而system v则可以一次修改多个信号量POSIX 信号量修改值得接口一次只能将信号量加1或者减1,而system v 则可以加上或者减去大于1的值posix 信号量没有提供一个等待信号量变为0的接口,而system v则通过semop 提供了这样的功能POSIX 信号量的实现没有提供UNDO操作,而system v 则提供了该操作当进程异常消亡,system v会对进程清理信号量资源的工作,而posix 则没有改功能

二、POSIX 信号量的api

头文件 #include <semaphore.h>

FIG 1