我想知道我在以下情况下的做法是否正确:
There are 5 processes P1, P2, P3, P4 ad P5. And they can execute as follows:
• P1 can start any time.
• P2 can start after P1 completes.
• P3 can start after P1 completes.
• P4 can start after both P2 and P3 complete.
• P5 can start after P4 completes.
This needs to be explained using semaphores.
我的方法:P2和P3必须等待P1(比如信号量S1)。 P4必须等待P2和P3(比如信号量S2),P5必须等待P4(比如信号量S3)。所以,最初所有其他进程都在等待,除了P1。 P1执行,S1阻止任何其他进程。 P1完成执行后,它可以发布两次,所以现在P2和P3正在执行,P4和P5正在等待。当P2和P3完成时,S2可以发布,然后P4可以执行,P5正在等待。 P4完成后,S3发布,P5然后执行。
这是对的吗?此外,还有一些混乱。在每种情况下,信号量的初始值是多少? S1为1,S2为2,S3为1?此外,当P1执行时,S1变为0并阻止所有其他进程,类似于其他情况,但它如何知道只允许P1和任何其他进程?
答案 0 :(得分:1)
几乎正确。但是,为了让P4在两个 P2和P3上等待,它必须获得S2两次(P2和P3不需要相互同步 - 它们都只是向S2发送一次。
当进程启动时,它们 all 应该等待信号量(P1除外)。 P2和P3在S1上等待,在S2上等待P4,在S3上等待P5。当计数为零时,信号量会阻塞。因此,所有信号量的初始值应为零。
P1立即执行,因为它不会在任何semahore上等待,它只是开始它的任务。