我想用 N 个并行进程打印 1 到 11、2 到 22 等
I want to print 1 to11,2 to 22 etc with N parallel processes
shared var K = L = 1;
Process_i
while (TRUE) {
L:=K;
K:=K+11;
print_num(L, L+10);
}
- 解释:
print_num
是打印从 L
到 L+10
的数字的例程。
我想完成以下场景:
- 第一次打印 1 到 11
- 第 2 次从 12 到 22
- 第 3 从 23 到 33 等
问题指出并行执行此操作可能会导致不需要的结果(要求我们提供导致这些结果的场景)并使用信号量解决此问题(up/down)。
有没有人有任何线索?因为我有点卡在这个
如果 print_num()
在新线程中执行,则每次调用它都会受到竞争条件的影响。例如 print_num(12,22)
可能会在 print_num(1,11)
之前结束执行并且输出将乱序。或者,两个或多个执行可能同时打印到 STDOUT,导致输出混乱。
您使用信号量来控制对有限资源的访问,在本例中为 STDOUT。您也可以使用锁。基本上你需要添加一些代码来防止 print_num
执行调用顺序,并且一次只有一个实例可以访问 STDOUT。您还应该将代码添加到 while
循环,以便它不会迭代,直到 print_num
启动并且 运行 并在执行顺序中确定其位置。
HTH
shared var K = L = 1;
Process_i
while (TRUE) {
L:=K;
K:=K+11;
print_num(L, L+10);
}
- 解释:
print_num
是打印从 L
到 L+10
的数字的例程。
我想完成以下场景:
- 第一次打印 1 到 11
- 第 2 次从 12 到 22
- 第 3 从 23 到 33 等
问题指出并行执行此操作可能会导致不需要的结果(要求我们提供导致这些结果的场景)并使用信号量解决此问题(up/down)。 有没有人有任何线索?因为我有点卡在这个
如果 print_num()
在新线程中执行,则每次调用它都会受到竞争条件的影响。例如 print_num(12,22)
可能会在 print_num(1,11)
之前结束执行并且输出将乱序。或者,两个或多个执行可能同时打印到 STDOUT,导致输出混乱。
您使用信号量来控制对有限资源的访问,在本例中为 STDOUT。您也可以使用锁。基本上你需要添加一些代码来防止 print_num
执行调用顺序,并且一次只有一个实例可以访问 STDOUT。您还应该将代码添加到 while
循环,以便它不会迭代,直到 print_num
启动并且 运行 并在执行顺序中确定其位置。
HTH