P、V操作描述简单同步
设同步信号量empty,含义为缓冲单元为空,初值为1
设同步信号量full,含义为缓冲单元为满,初值为0
输入进程:
申请空缓冲单元; P(empty);
输入数据到缓冲单元; 输入数据到缓冲单元;
释放满缓冲单元; V(full)
计算进程
申请满缓冲单元; P(full)
从缓冲单元取数据; 从缓冲单元取数据
释放空缓冲单元; V(empty);
同步:每一个同步信号量P、V操作成对出现在不同的进程代码中
经典同步问题
生产者消费者问题
P、V操作描述进程同步互斥问题步骤:
- 分析进程同步互斥关系;
- 设响应同步互斥信号量;
- 用P、V操作描述进程活动。
描述了一组生产者向一组消费者提供产品(数据),它们共享一个有界缓冲区,生产者向其中投放产品,消费者从中取出产品消费,生产者和消费者互斥使用整个缓冲池。
分析:
- 只要缓冲区未满,生产者就可把产品送入缓冲区,只要缓冲区未空,消费者便可从缓冲区取走产品并消耗它。
- 仅当缓冲区满时,生产者被阻塞,类似地,缓冲区空时,消费者被阻塞。
设置两个同步信号量:empty:表示空缓冲单元的数目,初值为缓冲区的大小n;
full:表示满缓冲单元(即产品)的数目,初值为0;
设置互斥信号量mutex:表示整个缓冲池,初值为1。
生产者进程Pi(i=1,2,……,m)
总结
- 两个P操作不可用颠倒,如生产者进程中如颠倒,当缓冲区都满时会引起死锁,消费者进程如颠倒,当缓冲区都空时会引起死锁;两个V操作可以颠倒,只是影响到释放缓冲区的顺序。
- 互斥操作,P、V操作成对出现在同一进程代码中。
- 同步操作,P、V操作成对出现在不同进程代码中。
来源:https://www.cnblogs.com/liugangjiayou/p/12481918.html