管程

 

如果实现互斥的P操作在实现同步的P操作之前,可能会发生死锁

 

(1)管程也是用来实现进程的互斥和同步的

(2)共享数据结构:生产者和消费者问题中,生产者和消费者都需要访问的缓冲区,可以用一种数据结构来表示此缓冲区,来对缓冲区进行管理

  • 互斥问题

 

  • 同步问题:两个消费者进程先执行,生产者进程后执行时;先开始count = 0,第一个消费者执行wait操作;所以第一个消费者进程等待在empty条件变量相关的队列中;同样的,第二个消费者也等待在empty条件变量相关的队列中。生产者进程开始执行,把自己生产的产品放在缓冲区当中;并且判断自己生产的产品是不是缓冲区中的第一个产品,如果是第一个产品,意味着有别的消费者进程在等待队列,所以在生产者进程会执行signal函数,在empty变量对应的等待队列中唤醒一个消费者进程。消费者先是取走一个产品,然后检查在自己取走产品之前,缓冲区是不是满了;如果满了,则说明之前可能有生产者进程在等待,于是消费者进程执行signal,在full变量对应的等待队列中唤醒一个生产者进程。

 

posted @ 2021-08-05 10:46  毋纵年华  阅读(170)  评论(0)    收藏  举报