15、多生产者多消费者问题
15.1、描述
15.2、分析
那么,经过分析,有1个互斥信号量,3个同步信号量。
15.3、实现
-
有mutex
儿子进程和女儿进程开始需要对各自喜欢的水果进行一个P操作,每次只要从盘子中取出对应的水果,那么此时就要对盘子进行一个V操作。
同时各个进程访问盘子的时候要进行一个互斥的操作。 -
没有mutex
-
为什么有mutex和没有mutex都一样呢?
因为本题中的缓冲区大小为1,在任何时刻,apple、 orange、 plate 三个同步信号量中最多只有一个是1。因此在任何时刻,最多只有一个进程的P操作不会被阻塞,并顺利地进入临界区…。 -
当有两个盘子的时候:
此时出现了父亲进程和母亲进程同时访问临界资源的情况,两个生产者进程同时对缓冲区进行访问,会导致数据覆盖的问题。所以此时就必须设置mutex来保证各个进程是互斥的访问缓冲区。
15.4、总结
- 要从事件的角度进行考虑,而不是对单个线程进行分析。