目录
POSIX信号量
POSIX信号量和SystemV信号量作用相同,都是用于同步操作,达到无冲突的访问共享资源目的。 但POSIX可以用于 线程间同步。
初始化信号量
#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); //P()
发布信号量
功能:发布信号量,表示资源使用完毕,可以归还资源了。将信号量值加1。
int sem_post(sem_t *sem);//V()
环形队列
在环形队列中,大部分情况下,单生产者和单消费者是可以并发执行的!!!
只有在满或空的时候,才有互斥与同步问题。
为了完成环形队列的cp问题,我们应做的核心工作为???
1.消费者不能超过生产者
2.生产者不能把消费者套一个圈以上
3.生产者与消费者什么时候相遇???
信号量是用来衡量临界资源数量的
1.对于生产者而言,更看重队列中的剩余资源 ->空间作用定义一个信号量
2.对于消费者而言,更看重队列中的数据 -> 数据资源定义一个信号量