Process 使用2个信号量的严格N进程同步
几年前,我参加了一个操作系统研讨会。我的任务是使用尽可能少的信号量创建一个进程同步算法。应该是这样的: P1->P2->P3->P4->P5 p(n)-过程 一次只运行一个进程,并且需要严格的排序 去年,我提出了使用3个信号量的解决方案(有效地创建了一个屏障)。 这是我的算法:Process 使用2个信号量的严格N进程同步,process,synchronization,operating-system,semaphore,Process,Synchronization,Operating System,Semaphore,几年前,我参加了一个操作系统研讨会。我的任务是使用尽可能少的信号量创建一个进程同步算法。应该是这样的: 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
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
S(n)-信号n
4W1表示“等待4次”
wait1和signal1与信号量1一起工作,依此类推 算法说明:
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
PS:这不是一个作业,这是一个困扰我太久的问题。这不能用两个信号灯来完成。3是最小值。作为参考,如果五个进程必须按特定顺序运行,而其余进程在前面的进程完成之前无法继续,则实际上有一个进程伪装为五个。理想的解决方案包括一个进程和零信号量。是的,实际上这就是解决方案。当一个人可以只创建一个进程并执行5个已经由程序代码序列化的任务时,为什么有人需要使用共享内存(信号量等)序列化N个同时启动的进程。但是在这里,你没有主进程,你不能伪装它。