考研帮 > 考研问答

2.7 经典进程同步问题

2.7 经典进程同步问题

  经典进程同步问题是从进程并发执行中归纳出的典型例子,这些问题常用来测试新的同步机制的可行性。主要的经典同步问题有生产者-消费者问题、读者-写者问题、哲学家进餐问题等。

  2.7.1 生产者-消费者问题

  生产者-消费者问题是著名的进程同步问题,它描述一组生产者进程向一组消费者进程提供消息。它们共享一个有界缓冲池,生产者向其中投放消息,消费者从中取得消息。生产者-消费者问题是许多相互合作进程的一种抽象。假定缓冲池中有n个缓冲区,每个缓冲区存放一个消息。由于缓冲池是临界资源,它只允许一个生产者投入消息,或者一个消费者从中取出消息。生产者之间、生产者与消费者之间、消费者之间都必须互斥地使用缓冲池。所以必须设置互斥信号量mutex,它代表缓冲池资源,它的数值为1。
  生产者和消费者之间应满足下列两个同步条件:
  只有在缓冲池中至少有一个缓冲区已存入消息后,消费者才能从中提取消息;否则,消费者必须等待;
  只有缓冲池中至少有一个缓冲区是空时,生产者才能把消息放入缓冲区;否则,生产者必须等待。
  为了满足第一个同步条件,设置一个同步信号量full,它代表的资源是缓冲区中满的个数,它的初始值为0,当它的值为n时,整个缓冲池满。这个资源是消费者进程所拥有,消费者进程可以申请该资源,对它施加P操作,而生产者进程对它施加V操作。同样,为了满足第二个同步条件,设置另一个同步信号量empty,它代表的资源是缓冲区空的个数,它的初始值为n,表示缓冲池中所有缓冲区为空。
  用类Pascal语言和信号量机制描述生产者-消费者问题的程序如下:
  

关于"最后阶段,真题的正确打开方式_备考经验_考研帮"15名研友在考研帮APP发表了观点

扫我下载考研帮

考研帮地方站更多

你可能会关心:

来考研帮提升效率

× 关闭