【问题标题】:I want to print 1 to11,2 to 22 etc with N parallel processes我想用 N 个并行进程打印 1 到 11、2 到 22 等
【发布时间】:2020-12-05 01:18:39
【问题描述】:
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
  • 第二次从 12 到 22
  • 3rd 从 23 到 33 等等。

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

【问题讨论】:

  • 这是什么语言?您需要提供更多信息。
  • 这是 C,当然是操作系统。

标签: printing process system


【解决方案1】:

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

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

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    相关资源
    最近更新 更多