首页 文章

使用信号量进行进程同步

提问于
浏览
0

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

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

1 回答

  • 1

    差不多正确 . 但是,为了使P4在P2和P3上等待,它必须获得S2两次(P2和P3不需要相互同步 - 它们都只是向S2发送一次 .

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

    P1由于其不在任何semahore上等待的简单原因而立即执行,它只是开始其任务 .

相关问题