Erlang 实现互斥量
2017-01-05 07:15
190 查看
#以下代码片段来自"Erlang编程指南", 值得注意一点的是stop/0函数发送停止消息以后, mutex进程仅在free状态下处理, 也就是说如果目前mutex没有人使用,直接结束mutex,如果正在使用,并且有等待在此信号量上的其他进程,那么这些正在使用的进程和正在queue的进程依然可以获取到mutex执行完他们的任务, 但是所有在stop信号之后的wait调用就不会被处理了, 很合理的处理.
-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.
##博客仅作个人记录##
-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.
##博客仅作个人记录##
相关文章推荐
- 利用Socket来实现Erlang与C#之间的通讯
- 利用内核对象----互斥量实现应用程序只运行一个实例
- 用Erlang实现MapReduce算法(一)
- erlang服务器编程思想和实现
- 互斥量实现单exe实例运行
- [Erlang 0019]Redis协议解读与实现(.Net & Erlang)
- 第17章 互斥量的设计与实现
- Erlang 实现的SIP服务器
- erlang服务器编程思想和实现
- [个人推荐]通过Erlang轻松实现可伸缩性,容错性,和负载平衡的大规模多人在线系统[zz from 神宗冥浩]
- 超简单的Erlang复数实现
- erlang的模块参数化及其实现
- C#利用Mutex互斥量实现同时只有一个进程实例在运行
- 实现linux的互斥量c++封装
- c++与erlang实现目录遍历
- 使用erlang实现的quicksort
- 用Erlang实现一个组合算法
- Linux学习之"互斥量实现多读单写锁"
- Erlang里实现MapReduce
- Visual C++利用互斥量同步线程实现文件读取进度条