erlang 练手 进程环
Erlang 编程指南第四章 练习4-2
编写一个程序,生成N个进程并相连成环,启动环后绕环发送M个消息,当收到退出消息后终止.
ringStart(M,N,Message, Cp) ->
io:format("ring start ~w|~w|~p~n",[M, N, Message]),
if
N > 0 ->
Pid = spawn(test_pid, ringReader, [N, self(), yes, 0]),
Pid ! {read, M, Message};
true -> Pid = Cp
end,
receive
{nextMsg, Ring} when Ring == 0 -> io:format("ring ok",[]);
{nextMsg, Ring} -> io:format("nest ring start ~w~n",[Ring -1]), Pid ! {read, Ring - 1, Message}, ringStart(Ring -1, 0, Message, Pid)
end. ringReader(N, Pid, Flg, Cp) ->
io:format("start ~w~n",[N]),
if
N > 0 andalso Flg == yes ->
CPid = spawn(test_pid, ringReader, [N-1, Pid, Flg, 0]);
true -> CPid = Cp
end,
receive
{read, Ring, Msg} ->
io:format("Reader ~w receive msg ~p~n",[N, Msg]),
if
N == 0 ->
io:format("P nextMsg ~w~n", [Pid]), Pid ! {nextMsg, Ring};
true -> CPid ! {read, Ring, Msg}
end,
ringReader(N, Pid, no, CPid);
stop -> io:format("Reader ~w stop ~n",[N])
end.
运行结果:

通过io:format 可以清楚地看到3个进程结成一个环,并绕环发送了3个消息.
erlang 练手 进程环的更多相关文章
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- Cocos2d-Lua (练手) 微信打飞机
学习下lua,目前入门级,使用版本为 v3.3 Final For Win,空闲时间不足,只能断断续续写点东西. 一.子弹效果 子弹只做了一种,扇形发射,可以增加扇形大小,子弹的 ...
- web前端学习部落22群分享给需要前端练手项目
前端学习还是很有趣的,可以较快的上手然后自己开发一些好玩的项目来练手,网上也可以一抓一大把关于前端开发的小项目,可是还是有新手在学习的时候不知道可以做什么,以及怎么做,因此,就整理了一些前端项目教程, ...
- webpack练手项目之easySlide(三):commonChunks(转)
Hello,大家好. 在之前两篇文章中: webpack练手项目之easySlide(一):初探webpack webpack练手项目之easySlide(二):代码分割 与大家分享了webpack的 ...
- webpack练手项目之easySlide(二):代码分割(转)
在上一篇 webpack练手项目之easySlide(一):初探webpack 中我们一起为大家介绍了webpack的基本用法,使用webpack对前端代码进行模块化打包. 但是乍一看webpack ...
- webpack练手项目之easySlide(一):初探webpack (转)
最近在学习webpack,正好拿了之前做的一个小组件,图片轮播来做了下练手,让我们一起来初步感受下webpack的神奇魅力. webpack是一个前端的打包管理工具,大家可以前往:http:/ ...
- JAVA大数类练手
今天突然看到了OJ上的大数类题目,由于学习了一点大数类的知识.果断水了6道题......都是非常基础的.就当的练手的吧. 学到的只是一些大数类的基本操作.以后多做点这样的题,争取熟练运用水大数题... ...
- Python之路【第二十四篇】:Python学习路径及练手项目合集
Python学习路径及练手项目合集 Wayne Shi· 2 个月前 参照:https://zhuanlan.zhihu.com/p/23561159 更多文章欢迎关注专栏:学习编程. 本系列Py ...
- node论坛练手
当时学node,自己写了个论坛练手,现在看还是有很多问题,有时间好好改改 https://github.com/hitbs228/countdown
随机推荐
- oracle flashback
一.Flashback闪回技术概述:当Oracle数据库发生逻辑错误时,必须使用flashback技术,实现快速和方便的恢复数据.对于人为错误,要确定受到错误事务影响的对象或者记录是非常困难的.使用f ...
- 发布ASP(非.Net)网站
1.安装IIS 2.设置网址.端口 3.设置文档(默认访问的文档,比如index.asp,index.htm等) 4.双击asp - 展开行为 - 启用父路径:true - 允许访问父目录 5.应用程 ...
- 前端javascript规范文档 (http://www.xuanfengge.com/category/web)
说明:本文档为前端JS规范 一.规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, ...
- 手动建立数据库连接的BaseDAO
package com.chinasoft.julong.dao; import java.sql.Connection; import java.sql.DriverManager; import ...
- 用VerbalExpressions来帮助我们写正则表达式
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用VerbalExpressions来帮助我们写正则表达式.
- BLE 广播数据解析
从上一篇GATT Profile 简介中提到过,BLE 设备工作的第一步就是向外广播数据.广播数据中带有设备相关的信息.本文主要说一下 BLE 的广播中的数据的规范以及广播包的解析. 广播模式 BLE ...
- C# Attribute(中)——Attribute本质论
小序: 上篇里,我们把Attribute“粘”在类的成员方法上show了一把,让Attribute跟大家混了个脸儿熟.中篇里,我们将探讨“究竟什么是Attrib ...
- Nginx【第一篇】安装
一.简介 Nginx("engine x")是一款是由俄罗斯的程序设计师 Igor Sysoev 所开发高性能的 Web 和 反向代理 服务器,也是一个 IMAP/POP3/SMT ...
- Ubuntu16.04/windows7修改本地hosts文件
1. 从github上下载最新的hosts文件:https://serve.netsh.org/pub/ipv4-hosts/ ubuntu16.04: 第二步:Ctrl+Alt+T 打开ubuntu ...
- JsonUtil对象与json互转
OrderDto orderDto = JsonUtil.json2Object(json, new TypeRef<OrderDto>() { }); package c ...