进程同步
上一节
下一节
进程同步引入
在上一节,由并发进程竞争公有资源,引出了互斥的概念及实现方法。那么进程间是否还存在其他的制约关系?
例子:计算进程和打印进程共同使用同一缓冲区Buffer,计算进程反复地把每次计算的结果放入Buffer,打印进程反复地取出Buffer的数据打印输出。
以上二者进程的并发与互斥不同,二者互为因果关系,计算进程的执行结果是打印进程的执行条件,打印进程的执行结果也是计算进程的执行条件。这种只存在于被影响进程之间的制约关系称为直接制约,也就是进程同步。
实例:用P、V原语实现同步(单缓冲)
A为发送进程,B为接收进程,二者通过缓冲区Buffer传递数据,条件如下:
(1)缓冲区空时,B不能取;
(2)缓冲区满时,A不能发送。
实例:用P、V原语实现同步(多缓冲)
A为发送进程,B为接收进程,二者通过缓冲区Buffer传递数据,条件如下:
(1)缓冲区空时,B不能取;
(2)缓冲区满时,A不能发送;
(3)缓冲区按照FIFO(First In First Out)排列。
实例:生产者消费者问题
而在一般情况下,在具体问题的分析中进程互斥与同步都是需要考虑的。
例如多个生产者进程和消费者进程同时访问缓冲区队列。生产者生产数据放入缓冲区,消费者取走数据消费,缓冲区不能同时进行读写操作。
本节资料

