1.并行问题的一个例子
start() ->
case whereis(db_server) of
undefined ->
Pid = spawn(db_server, init, []), %(1)
register(db_server, Pid), {ok, Pid}; %(2)
Pid when is_pid(Pid) ->
{error, already_started}
end.
假设有A和B两个进程并行地执行上述代码,当A执行完(1)时由于时间片用完而脱离运行。这时B获得运行机会,他执行完(2),然后CPU资源再次回到A。这时A要执行(2),而由于进程标识符为db_server的进程已在B中注册,此时不能注册第二次,于是出现运行时错误。
2. 有语句:spawn (test, init, []).则函数init必须export才能为spawn所用。<<