Это как вы избегаете гонки?Избегайте состояния гонки в erlang
-module(b).
-export([my_spawn/1]).
my_spawn(Func) ->
Pid = spawn(listener()),
Pid ! {self(), spawn, Func},
receive
{From, Desired_Pid} -> Desired_Pid
end.
listener() ->
receive
{From, spawn, Func} ->
{Pid,Ref} = spawn_monitor(Func),
From ! {self(), Pid},
receive
{'DOWN',Ref, process, _, _} -> io:format("I lived for [calculated how long i lived]")
end
end.
То, что я пытаюсь достичь здесь
A = spawn(proc),
monitor(process,A).
Однако может умереть прежде, чем выполняет второй линии.
Возможный дубликат [erlang race condition of spawn and receive] (http://stackoverflow.com/questions/28579698/erlang-race-condition-of-spawn-and-receive) – Pascal