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()
- 除了第一个所有其它进程将等待semaphore0(做WAIT0)
- 后过程1等待4 semaphores1它发送4个信号0,创建一个障碍,因为其他进程等待第一个成功完成。
问题是我无法弄清楚如何使它使用2个信号量。
PS:这不是一项任务,这是一个长期处于我脑海的问题。
作为参考,如果五个进程*必须*以特定顺序运行,并且其余进程无法继续直到前面的进程完成,则实际上有一个进程伪装成五个进程。理想的解决方案包括*一个*过程和*零*信号量。 – cHao
是的,实际上这是解决方案。为什么任何人都需要使用共享内存(信号量等)序列化N个同时启动的进程,只需创建一个进程并执行已由程序代码序列化的5个任务。但是在这里,你没有主流程,你不能伪装它。 – Kveri