Erlang gen_server:start_link/3 和gen_server:start_link/4
2012-02-24 11:32
309 查看
两个方法都可以用来启动一个gen_server服务器进程,具体的参数如下:
gen_server:start_link(Module,Args,Option);
gen_server:start_link(ServerName,Module,Args,Option);
第二个方法只比第一个多了个ServerName,在gen_server的源码中区别如下:
再具体看gen的源码:
可以看出如果有ServerName参数就会先查找一遍是否有同名的进程存在,有就会产生{error,{already_started,Pid}} 的提示。
所在在开发并发的gen_server程序的时候要注意调用哪个方法。
gen_server:start_link(Module,Args,Option);
gen_server:start_link(ServerName,Module,Args,Option);
第二个方法只比第一个多了个ServerName,在gen_server的源码中区别如下:
start_link(Mod, Args, Options) -> gen:start(?MODULE, link, Mod, Args, Options). start_link(Name, Mod, Args, Options) -> gen:start(?MODULE, link, Name, Mod, Args, Options).
再具体看gen的源码:
-spec start(module(), linkage(), emgr_name(), module(), term(), options()) -> start_ret(). start(GenMod, LinkP, Name, Mod, Args, Options) -> case where(Name) of undefined -> do_spawn(GenMod, LinkP, Name, Mod, Args, Options); Pid -> {error, {already_started, Pid}} end. -spec start(module(), linkage(), module(), term(), options()) -> start_ret(). start(GenMod, LinkP, Mod, Args, Options) -> do_spawn(GenMod, LinkP, Mod, Args, Options).
可以看出如果有ServerName参数就会先查找一遍是否有同名的进程存在,有就会产生{error,{already_started,Pid}} 的提示。
所在在开发并发的gen_server程序的时候要注意调用哪个方法。
相关文章推荐
- Erlang gen_server:start_link/3 和gen_server:start_link/4
- Erlang gen_server:start_link/3 和gen_server:start_link/4 的区别以及各参数的含义
- Erlang gen_server:start_link/3 和gen_server:start_link/4 的区别以及各参数的含义
- Erlang入门:gen_server实例操作与练习1
- [Erlang 学习笔记]erlang behaviour小结之gen_server
- Erlang入门:gen_server实例操作与练习2
- erlang(2) gen_server
- Erlang generic standard behaviours -- gen_server system msg
- [erlang 学习] 转载的 gen_server中管理新的进程
- [Erlang 0023] 理解Erlang/OTP gen_server
- erlang的gen_server
- erlang(2) gen_server
- Erlang之gen_server篇
- erlang behaviour小结之gen_server OTP入门
- Erlang的gen_server的terminate使用的几点总结
- [Erlang 0036] "HOW TO"不创建崩溃报告主动销毁gen_server进程
- [Erlang 0036] "HOW TO"不创建崩溃报告主动销毁gen_server进程
- [Erlang 学习笔记]erlang behaviour小结之gen_server
- erlang gen_server行为模式
- erlang四大behaviour之一gen_server