一、生产者——消费者问题
互斥访问的理解:假如有两个生产者进程,他们都检测到缓冲区是空的,然后都放入缓冲区,这样会出现后放入的覆盖前面放入的,所以各个进程必须互斥的进程访问。
对于生产一个产品和使用产品也放入PV操作之间的话,会增加代码量,是程序的并行度降低,所以最好还是不要将其放到PV操作之间。
总结:
实现互斥的操作一定在实现同步操作之后,否则会发生死锁操作。
二、多生产者——多消费者问题
不同生产者和不同消费者所生产和消费的类别是不一样的。
针对问题,分析互斥与同步的关系:
可不可以不用互斥信号量?
两个消费者都能对缓冲区进行访问的话,会面临覆盖的问题。
三、吸烟者问题
这个问题其实也可以看作生产者和消费者的问题,供应者可以看作是生产者,而抽烟者可以看作是消费者。但是与之前的生产者和消费者不同的是在于生产者会生产三种不同的产品。
总结:
四、读者—写者问题
假如读进程和写进程同时访问共享文件的话,有可能导致读进程读到的数据并不是它原先想读的数据,因为写进来的数据把原先想读的数据覆盖掉了,所以写进程和读进程之间他们是不能同时访问共享文件的。
假如两个写进程同时访问共享文件的话,有可能他们都往同一块地方写入自己想要写的数据,这就有可能发生第二个数据把第一个写入数据覆盖掉的情况。
rw=1时代表没有进程在访问共享文件,而rw=0时代表有进程在访问共享文件。
五、哲学家进餐问题
怎么避免死锁现象的发生呢?
总结:
总结
本节主要学习关于进程的同步、互斥在实际问题中的应用,主要是通过PV操作来实现,面对不同的问题,要思考哪些问题是进程互斥,哪些问题是进程同步。