プロセス Pid に値を設定する関数があり、プロセスを別のプロセスに依存させることができます。したがって、プロセスに値を設定すると、それに依存するプロセスにも値を設定する必要があります。ただし、プロセス間に円がある場合
i.e. A depends on B and B depends on A
次に、エラーメッセージを返したいです。
既に値が変更されている Pid のリストを渡して、同じ Pid に 2 回遭遇した場合 (Pid のリストのメンバーであるかどうかを確認することによって)、関数全体が停止するようにします。これは私のコードです:
set_values(Pid, Value, PidSet, PidList) ->
case lists:member(Pid, PidList) of
false -> io:format("Setting Value~n"),
lists:map(fun(Pid) ->
Pid ! {self(), set_value, Value, [Pid | PidList]} end, PidSet);
true -> io:format("circle_detected~n"),
Pid ! {circle_detected}
end.
実行すると、次のエラーが表示されます。
=ERROR REPORT==== 2-Nov-2014::17:47:45 ===
Error in process <0.888.0> with exit value: {badarg,[{lists,member,
[<0.888.0>,empty_list],[]},{process,set_viewer_values,4,[{file,"process.erl"},{line,56}]},
{process,looper,2,[{file,"process.erl"},{line,116}]}]}
私が理解していることから、私はリストに悪い引数を与えます:メンバー関数。私は何をすべきか?
ありがとう