问题:
总共有 读入、执行、打印 三个进程,试用PV操作描述读入B1打印B2的同步过程。
问题解读:
这个问题就是说了这样一件事:一个输入B1,被操作之后,成为B2,将B2打印。怎样用PV操作来说这件事。那么新的问题来了:啥是个PV操作?
就拿这道题来解释PV操作吧,我想打印一个值,前提条件是这个值存在吧,如果不存在,那么打印这个动作就不应该被执行,不能说啥也没有在那瞎打印吧。那么怎样才能让它不执行呢?
这就需要引入信号量机制了,当一个操作的信号量为负数的话,就会挂起等待,不执行。当一个操作的信号量为1或者大于1的时候,就可以执行。
P操作会使信号量 -1,V操作会使信号量 +1。
解决问题:
按理说,我有三个操作,读入(Reader)、执行(Executer)、打印(Printer),应该对应设置三个信号量R、E、P,对应PV操作流程如下图所示:
解释上图的步骤:
首先,将输入信号量R初始化为1,保证读入进程Reader能够启动。
如果这时候没有从Reader进程开始执行,而是试图执行Executer或者Printer进程,由于信号量E、P初始值都是0,而且一上来就是P操作,所以会使信号量E、P成为 -1,这样进程将会挂起等待,不执行。