Spawning processes

Vlad Dumitrescu (EAW) <>
Fri Feb 14 15:24:12 CET 2003

> Pid = case whereis(Name) of
>          undefined ->
>             global:trans({{start,Name},self()},
>                          fun() ->
>                             start()
>                          end);
>          P when pid(P) ->
>             P
>       end.

Thank you, Ulf. That's a good suggestion! My solution was the commented-out start() below, which works fine when the consecutive calls are from the same process (which was my problem), but of course it can't protect in case of two processes calling at the same time. I only hope it won't be too much of a performance hit (most of the time, the server exists)...

best regards,

start() ->
    global:trans({{start, ?SERVER}, self()}, fun start_1/0, [node()]).

%start() ->
%    timer:sleep(0),
%    start_1().

start_1() ->
    case whereis(?SERVER) of
	undefined ->
	    spawn(fun init/0);
	Pid ->

More information about the erlang-questions mailing list