产品的需求,所以4号线程仍然被阻塞。接着1号生产者在2号缓冲区生产产品,1号产品生产完毕后4号消费者才开始依次消费已经有了的1号、3号和2号产甜。运行结果如下:输入文件是:求置2:产0产生在生岀始成发开完3枣开完2发开完1开完-1请开完7请开完7333422211144444444生在生岀始成品品产产11费费1始成品品品产产产333费费费求始成品品品产产产222费费费求始成者者者0者者者者1者者者2者者2者者者0者者者1产产产产产产置产产产e费费e置生生生位消生生生位生生生位®知任的成完经己者费消和者岀产退生键的意测试用例二2.p2c1?3?1?4p4p3分析:首先2号消费者被激活,它提出对3号产品的需求,但是此时没有3号产品,线程被阻塞。然后1号生产者开始在0号缓冲区生产产品,它无法满足2号消费者的需求,所以线程仍然被阻塞。接着4号生产者开始在1号缓冲区生产产品,它同样不能满足2号消费者首先的需求,线程继续被阻塞,而此时缓冲区已经被占满,3号生产者始终不能生产产品。这样就产生了死锁。运行结果如下:In光标一直在闪动,但是程序不能继续进行下去,出现了死锁。一.死锁问题的思考和改进1.?死锁的条件通过对死锁问题的仔细思考,可以总结出死锁的出现需要一些必耍条件互斥条件占有且等待不可剥夺条件循环等待条件只要破坏上面四个条件之一就可以避免死锁的发生。2・?死锁的解决很自然的就可以想到两种方法:检测到死锁发生时,停掉死锁所在的进程,即“毙掉”进程。根据上面发现的死锁发生的条件对一条进程超前检测,当发现可能出现死锁的情况时,提前破坏掉死锁发生的条件,避免死锁的出现。基于本次实验的要求,如果采用第一种方法似乎就破坏了输入的需求,因此在本次程序中釆用第二种方法。3・?解决策略具体到本次实验,通过观察可以发现:在Buffer—定的条件下,当Buffer没有空位置时,消费者线程需求的产甜又不在