【发布时间】:2015-04-13 19:44:08
【问题描述】:
我想知道我在以下情况下的做法是否正确:
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 可以发布,然后 P4 可以执行,P5 正在等待。 P4 完成后,S3 发布,然后 P5 执行。
这是对的吗?此外,还有一些混淆。在每种情况下,信号量的初始值是多少? S1 是 1,S2 是 2,S3 是 1?另外,当 P1 开始执行时,S1 变为 0 并阻塞所有其他进程,其他情况类似,但它怎么知道只允许 P1 和任何其他进程首先?
【问题讨论】:
-
您要解决的问题是什么,或者这是一个假设?您是否也考虑过使用线程安全的 FIFO 队列?
-
@Igor 你能告诉我这个解决方案是否会在任何时候死锁吗?
标签: operating-system synchronization semaphore