【问题标题】:strict N process synchronization using 2 semaphores使用 2 个信号量进行严格的 N 进程同步
【发布时间】:2012-01-06 03:44:32
【问题描述】:

几年前,我参加了一个操作系统研讨会。我的任务是创建一个使用尽可能少的信号量进行进程同步的算法。它应该看起来像这样:

P1 -> P2 -> P3 -> P4 -> P5

P(n) - 过程

一次只运行一个进程并且需要严格的排序

去年我提出了使用 3 个信号量的解决方案(有效地创建了一个屏障)。 这是我的算法:

P   S1  S1  S1  S1
4W1 W0  W0  W0  W0
4S0 P   S2  S2  S2
    3W2 W1  W1  W1
    3S1 P   S1  S1
        2W1 W0  W0
        2S0 P   S2
            W2  W1
            S1  P

(执行是从上到下,每个lane是一个进程) P - 需要序列化的实际工作
W(n) - 等待
S(n) - 信号n
4W1 的意思是“做 4 个 wait1s”
wait1 和 signal1 使用 semaphore1 等操作...

算法说明:

  1. 每个流程通道开始
  2. 第一个进程将运行,其他进程将执行 signal1()
  3. 除第一个进程外,其他所有进程都将等待信号量 0(执行 wait0)
  4. 进程 1 等待 4 个信号量 1 后,它发送 4 个信号量 0,创建一个屏障,因为其他进程等待第一个信号量成功完成。

问题是我不知道如何使用 2 个信号量使其工作。

PS:这不是一个作业,这是一个困扰我太久的问题。

【问题讨论】:

  • 作为参考,如果五个进程必须按特定顺序运行,并且其余进程无法继续直到前面的进程完成,则您实际上只有一个进程伪装成五人。理想的解决方案包括一个进程和个信号量。
  • 是的,实际上这就是解决方案。当一个人只能创建一个进程并执行已由程序代码序列化的 5 个任务时,为什么有人需要使用共享内存(信号量等)序列化 N 个同时启动的进程。但是在这里,你没有主进程,你不能伪装它。

标签: process synchronization operating-system semaphore


【解决方案1】:

不能使用 2 个信号量来完成。 3 是最小值。

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多