Chinaunix首页 | 论坛 | 博客
  • 博客访问: 628015
  • 博文数量: 149
  • 博客积分: 3901
  • 博客等级: 中校
  • 技术积分: 1558
  • 用 户 组: 普通用户
  • 注册时间: 2009-02-16 14:33
文章分类

全部博文(149)

文章存档

2014年(2)

2013年(10)

2012年(32)

2011年(21)

2010年(84)

分类: Python/Ruby

2012-01-18 21:27:11



来自 :
  1. -module(tut15).
  2. -export([start/0, ping/2, pong/0]).

  3. ping(0, Pong_PID) ->
  4.     Pong_PID ! finished,
  5.     io:format("ping finished~n", []);
  6. ping(N, Pong_PID) ->
  7.     Pong_PID ! {ping, self()},
  8.     receive
  9.         pong ->
  10.             io:format("Ping received pong~n", [])
  11.     end,
  12.     ping(N - 1, Pong_PID).


  13. pong() ->
  14.     receive
  15.         finished ->
  16.             io:format("Pong finished~n", []);
  17.         {ping, Ping_PID} ->
  18.             io:format("Pong received ping~n", []),
  19.             Ping_PID ! pong,
  20.             pong()
  21.     end.

  22. start() ->
  23.     Pong_PID = spawn(tut15, pong, []),
  24.     spawn(tut15, ping, [3, Pong_PID]).



首先理解为递归,上面的代码 严格按 匹配模式来运行;遇到 receive 原语会拥塞;

ping > Pong received ping
  pong > Ping received pong
  ping N-1 
  ping > Pong received ping
    pong > Ping received pong
    ping N-1-1
    ping > Pong received ping
       pong > Ping received pong
       ping N-1-1  (触发 ping(0, Pong_PID)
       ping > ping finished
           Pong finished









阅读(1101) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~