以下是来自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