我想用 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 是打印从 LL+10 的数字的例程。

我想完成以下场景:

问题指出并行执行此操作可能会导致不需要的结果(要求我们提供导致这些结果的场景)并使用信号量解决此问题(up/down)。 有没有人有任何线索?因为我有点卡在这个

如果 print_num() 在新线程中执行,则每次调用它都会受到竞争条件的影响。例如 print_num(12,22) 可能会在 print_num(1,11) 之前结束执行并且输出将乱序。或者,两个或多个执行可能同时打印到 STDOUT,导致输出混乱。

您使用信号量来控制对有限资源的访问,在本例中为 STDOUT。您也可以使用锁。基本上你需要添加一些代码来防止 print_num 执行调用顺序,并且一次只有一个实例可以访问 STDOUT。您还应该将代码添加到 while 循环,以便它不会迭代,直到 print_num 启动并且 运行 并在执行顺序中确定其位置。

HTH