使用信号量处理同步



我想知道在以下情况下我的方法是否正确:

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和任何其他进程?

几乎正确。然而,为了让P4在上等待P2和P3,它必须获取S2两次(P2和P3不需要相互同步-它们都只需向S2发布一次。

当进程启动时,它们所有都应该等待信号量(P1除外)。P2和P3在S1上等待,P4在S2上等待,P5在S3上等待。信号量为零时会阻塞。呃,所有信号量的初始值都应该为零。

P1立即执行,原因很简单,它不等待任何信号,只是开始执行任务。

最新更新