一:POSIX信号量:
1.基本概念
- POSIX信号量和SystemV信号量作用相同,都是来实现同步或者互斥机制,本质也是计数器,通常用它来表示他所保护的临界资源的资源数目。
2.相关接口
初始化信号量:
- int sem_init(sem_t *sem, int pshared, unsigned int value);//第二个参数0表示线程间共享,非零表示进程间共享。
等待信号集(相当于P操作)
- int sem_wait(sem_t *sem);
发布信号(相当于V操作)
- int sem_post(sem_t *sem);
销毁信号量
- int sem_destroy(sem_t *sem);
3.小案例:
- 上一节生产者–消费者的例子是基于链表的,这次基于环形队列,实现以下功能:如果队列为空那么保证生产者先运行;如果队列满了,保证消费者先运行。这次可以将队列的空间和队列的数据看作是两份不同的资源,而生产者只关心有没有”空间“资源,消费者只关心有没有”数据“资源,所以这里就需要有两个信号量来表示两份不同的资源,semBlank表示”空间“资源,初始值设为队列的总容量,semData表示”数据“资源,初始值设为0.