目录
信号量 posix
POSIX
信号量和
SystemV
信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但
POSIX
可以用于线程间同步。
对于一个较大的资源数是可以被分成多份的,这时候我们也会使用信号量表示资源数目。
以电影院举例子:我们的共享资源就是电影院的座位,我们就相当于进程,我们想要获取共享资源,不是立马就去获取共享资源,而是要先买票预定,而电影票就相当于信号量,只有当信号量还存在时,大于零,我们才可以去获取资源。
所以信号量的本质我们可以理解为就是资源的计数器,申请信号量,也就简洁的判断了线程能否进行资源访问了。
线程的信号量相较于systemV的更加简单,我们先来认识一些接口:
初始化信号量
#include <semaphore.h>int sem_init(sem_t *sem, int pshared, unsigned int value);参数:pshared:0 表示线程间共享,非零表示进程间共享value :信号量初始值

销毁信号量
int sem_destroy(sem_t *sem);

等待信号量
功能:等待信号量,会将信号量的值减
1
int sem_wait(sem_t *sem);

发布信号量
功能:发布信号量,表示资源使用完毕,可以归还资源了。将信号量值加
1
。
int sem_post(sem_t *sem);

上一节生产者
-
消费者的例子是基于
queue
的
,
其空间可以动态分配
,
现在基于固定大小的环形队列重写这个程序 POSIX信号量)。