2011-11-25 37 views
1

几年前,我有一个操作系统研讨会。我的任务是使用尽可能少的信号量为流程同步创建算法。它应该是这个样子的:严格的使用2个信号灯的N进程同步

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 

(执行是从上到下,每个通道是一个单一的过程) P - 这需要做连载实际工作
W(N) - waitn
小号(N) - signaln
4W1的意思是 “做4个wait1s”
WAIT1和信号1与semaphore1工作等等......

说明算法:

  1. 每个进程车道开始
  2. 第一个进程运行,其他人会做信号1()
  3. 除了第一个所有其它进程将等待semaphore0(做WAIT0)
  4. 后过程1等待4 semaphores1它发送4个信号0,创建一个障碍,因为其他进程等待第一个成功完成。

问题是我无法弄清楚如何使它使用2个信号量。

PS:这不是一项任务,这是一个长期处于我脑海的问题。

+1

作为参考,如果五个进程*必须*以特定顺序运行,并且其余进程无法继续直到前面的进程完成,则实际上有一个进程伪装成五个进程。理想的解决方案包括*一个*过程和*零*信号量。 – cHao

+0

是的,实际上这是解决方案。为什么任何人都需要使用共享内存(信号量等)序列化N个同时启动的进程,只需创建一个进程并执行已由程序代码序列化的5个任务。但是在这里,你没有主流程,你不能伪装它。 – Kveri

回答

0

它不能使用2个信号量来完成。 3最低。