Erlang中文论坛

标题: erlang的见闻 [打印本页]

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


  第二个:注册进程
注册进程一般就是用于进程之间的通信,但是我在《erlang编程指南》中,我发现了作者在书中讲述
的互斥信号,用了以下代码来解释深层原理。
-module(mutex).
-export([start/0,stop/0]).
-export([wait/0,signal/0]).
-export([init/0]).
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的特性(要收到特定的消息,否则阻塞)
来控制进程的停止。





欢迎光临 Erlang中文论坛 (https://bbs.erldoc.com/) Powered by Discuz! X3.3