high佬全 发表于 2015-1-14 00:04:13

erlang的见闻

   今天有两个我觉得比较好的题材:就当是补回我上次贴匆匆了解吧:handshake   第一个:定义宏
可能第一眼看到这个词就觉得没什么特别,原因是无论在c/c++都是非常常见,甚至
在erlang中。但是今天我发现了宏也可以这样来玩
例:-define(AVERAGE(List),begin Sum=lists:sum(List) ,Length=length(List),Sum/Length end)。


第二个:注册进程
注册进程一般就是用于进程之间的通信,但是我在《erlang编程指南》中,我发现了作者在书中讲述
的互斥信号,用了以下代码来解释深层原理。
-module(mutex).
-export().
-export().
-export().
start()->
   register(mutex,spawn(?MODULE,init,[])).
stop()->
   mutex ! stop.

wait() ->
   mutex!{wait,self()},
   receive ok -> ok end.

signal() ->
mutex ! {signal,self()},ok.

init() ->
free().

free() ->
receive
   {wait,Pid} ->
         Pid ! ok,
         busy(Pid);
      stop ->
         terminate
end.

busy(Pid) ->
   receive
   {signal,Pid} ->
         free()
   end.

terminate() ->
   receive
       {wait,Pid} ->
            exit (Pid,kill),
             terminate()
    after
       0 -> ok
   end.

这段代码中巧妙地用start函数来创建一个进程并注册为mutex,并留下了wait()和signal()、stop()的
接口供使用者调用,而且另一巧妙之处就是作者运用了receive的特性(要收到特定的消息,否则阻塞)
来控制进程的停止。
页: [1]
查看完整版本: erlang的见闻