设为首页收藏本站

Erlang中文论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 13056|回复: 0

erlang的见闻

[复制链接]
发表于 2015-1-14 00:04:13 | 显示全部楼层 |阅读模式
   今天有两个我觉得比较好的题材:就当是补回我上次贴匆匆了解吧   第一个:定义宏
可能第一眼看到这个词就觉得没什么特别,原因是无论在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的特性(要收到特定的消息,否则阻塞)
来控制进程的停止。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Erldoc.com  

GMT+8, 2024-4-18 22:14 , Processed in 0.473670 second(s), 9 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表