循环并发

时间:2014-01-05 19:12:02

标签: ada

是的,我又来了。 所以我在Ada中遇到并发问题。基本上我的程序的一部分看起来像这样:

for i in 1..it loop

    for x in 1..A loop
        for y in 1..B
            --tab(x,y):=...
        end loop;
    end loop;

    for x in 1..A loop
        for y in 1..B
            --tab(x,y):=...
        end loop;
    end loop;

end loop;

在这个循环中有一些计算。我打算做的是让这两个内部'循环同时工作。来自循环1的一个元素,然后来自循环2的一个元素元素或稍微不对称的“对称”。但通常我希望它看起来像这样:第一次迭代,两次内部'循环同时工作,所有操作完成,迭代完成。第二次迭代相同等等。我的问题是:我能用ENTRY和ACCEPT语句来做吗?或者这需要更多的东西?如果你可以指出我正确的解决方案,因为我已经看到很多例子,但没有一个适合我的问题。

2 个答案:

答案 0 :(得分:0)

如果两个内部循环真的不共享任何数据,你可以这样做:

task First;
task Second;

task body First is
   ...
begin
   for i in 1 .. it loop
      for x in 1 .. A loop
         for y in 1 .. B loop
             ...
         end loop;
      end loop;
   end loop;
end First;

task body Second is
   ...
begin
   for i in 1 .. it loop
      for x in 1 .. A loop
         for y in 1 .. B loop
             ...
         end loop;
      end loop;
   end loop;
end Second;

答案 1 :(得分:0)

您可能希望将任务量限制为系统支持的核心数量。在计算pi时看到这个例子: https://github.com/AdaDoom3/OldStuff/blob/master/time_pi.adb