以下是来自learn you some erlang for great good一书中的例子,相当的经典,直接拿来用了。
-module(kitchen).
-compile(export_all).
start(FoodList) ->
spawn(?MODULE, fridge, [FoodList]).
store(Pid, Food) ->
Pid ! {self(), {store, Food}},
receive
{Pid, Msg} -> Msg
after 3000 ->
timeout
end.
take(Pid, Food) ->
Pid ! {self(), {take, Food}},
receive
{Pid, Msg} -> Msg
after 3000 ->
timeout
end.
fridge(FoodList) ->
receive
{From, {store, Food}} ->
From ! {self(), ok},
fridge([Food|FoodList]);
{From, {take, Food}} ->
case lists:member(Food, FoodList) of
true ->
From ! {self(), {ok, Food}},
fridge(lists:delete(Food, FoodList));
false ->
From ! {self(), not_found},
fridge(FoodList)
end;
terminate ->
ok
end.1>
c(kitchen).{ok,kitchen}2> Pid = kitchen:start([rhubarb, dog, hotdog]).<0.84.0>3> kitchen:take(Pid, dog).{ok,dog}4> kitchen:take(Pid, dog).not_found
本文通过一个厨房冰箱管理的示例介绍了Erlang语言中的进程间通信机制及轻量级并发处理方式。示例展示了如何使用spawn启动新的进程、如何发送消息以及如何接收并处理这些消息。
1027

被折叠的 条评论
为什么被折叠?



