1
我目前停留在創建兩個任務內部的過程添加數組傳遞給相應的過程。輸出參數undefined
我的通用包裝看起來是這樣的:
generic
type Item_Type is private;
with function "+"(Left: Item_Type; Right: Item_Type) return Item_Type;
package Parallel_Algorithms is
type Array_Type is array(Natural range <>) of Item_Type;
type Array_Access_Type is access all Array_Type;
procedure Parallel_Sum(Input: Array_Access_Type; Result: out Item_Type);
end Parallel_Algorithms;
我實現了Parallel_Sum
方法通過以下方式,意識到該實現是不完美的,也不是線程安全的。
procedure Parallel_Sum(Input: Array_Access_Type; Result: out Item_Type) is
Loop_Var: Integer:= 0;
task type T;
Task1, Task2 : T;
task body T is
begin
while Loop_Var < Input'Length loop
Result := Result + Input(Loop_Var);
Loop_Var := Loop_Var + 1;
end loop;
end T;
begin
-- Result := Temp;
end Parallel_Sum;
如果我現在運行我的主程序Result
輸出總是最終被類似1918988326.考慮到我的數組(1,2,3,4),其結果顯然是錯誤的內部元素。
我在另一篇文章中讀到,不改變out類型可能導致相應變量的未定義行爲。
什麼纔是真正的'真正的'Result
?
你的任務體循環是完全錯誤的。您正在遍歷數組的長度,而不是遍歷其索引值的範圍。 –
您可以將參數更改爲 類型Input_Type爲<>; 這將強制Input_Type爲整數類型。您將不需要傳入「+」功能。 –
我明白你的意思,但我想過要開始這兩個任務,每個任務都將當前索引的值添加到結果中。通過這樣做,我可以在Loop_Var等於列表長度的地方獲得完整的結果,並且循環將終止以及任務? – hGen