使用信号量进行进程同步

Process synchronization using semaphores

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

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执行完后,可以post两次,所以现在P2和P3在执行,P4和P5在等待。当P2和P3完成后,S2可以post,然后P4可以执行,P5等待。 P4完成后,接着执行S3posts,然后执行P5。

这样对吗?此外,还有一些困惑。每种情况下信号量的初始值是多少? S1 是 1,S2 是 2,S3 是 1?此外,当 P1 开始执行时,S1 变为 0 并阻塞所有其他进程,对于其他情况类似,但它如何知道首先只允许 P1 和任何其他进程?

几乎正确。但是,为了让 P4 等待 both P2 和 P3,它必须获取 S2 两次(P2 和 P3 不需要相互同步 - 它们都只是 post 一次到 S2.

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

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