1.信号量的概念
信号量(semaphore)广泛用于进程或线程间的同步和互斥,信号量本质上是一个非负的整数计数器,它被用来控制对公共资源的访问。
编程时可根据操作信号量值的结果判断是否对公共资源具有访问的权限,当信号量的值大于0时,表示当前可用资源的数量;当它的值小于0时,其绝对值表示等待使用该资源的进程个数。PV原语是对信号量的操作,一次P操作使信号量减1,一次V 操作使信号量加1。对于P操作
信号量主要用于进程或线程间的同步和互斥这两种典型情况。
信号量用于互斥:

信号量用于同步:

使用PV操作实现进程互斥时应该注意的是: 1. 每个程序中用户实现互斥的P、V操作必须成对出现,先做P操作,进临界区,后做V操作,出临界区。若有多个分支,要认真检查其成对性。 2. P、V操作应分别紧靠临界区的头尾部,临界区的代码应尽可能短,不能有死循环。 3. 互斥信号量的初值一般为1。
在 POSIX 标准中,信号量分两种,一种是无名信号量,一种是有名信号量。无名信号量一般用于线程间同步或互斥,而有名信号量一般用于进程间同步或互斥。它们的区别和管道及命名管道的区别类似,无名信号量则直接保存在内存中,而有名信号量要求创建一个文件。