进程的经典同步问题

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