管程


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

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


- 互斥问题

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





浙公网安备 33010602011771号