[練習]erlangは生産者と消費者を実現する
2568 ワード
もとは1つ书いたことがあります....私はすべて忘れました..
http://fair-jm.iteye.com/blog/1894288
以上これは间违っています..いわゆる生产者の消费者との差が远くなったことを见ました..何ですか(´▽`)¯)¯(
..
以上これ...まだ少し似ています..
使用同期の生産と消費が0以下の場合消費者が詰まる 100以上で生産者が詰まる
Erlangのreceiveメカニズムは良いです.もしあなたが送ったメッセージが現在詰まっているreceiveに合わなければ、取り出しられません.まだ「ポスト」で一致するreceiveが詰まってから再び出されます.
実行:
http://fair-jm.iteye.com/blog/1894288
以上これは间违っています..いわゆる生产者の消费者との差が远くなったことを见ました..何ですか(´▽`)¯)¯(
..
%% @author cc fairjm
%% @doc @todo Add description to Producer_Consumer.
-module(producer_consumer).
%% ====================================================================
%% API functions
%% ====================================================================
-export([start/0,consume/0, produce/0,rec/1]).
-define(SERVER,?MODULE).
-define(NUM,100).
%% ====================================================================
%% Internal functions
%% ====================================================================
start() ->
Pid=spawn(?MODULE,rec,[0]),
case whereis(?MODULE) of
undefined -> register(?SERVER,Pid);
_Other -> unregister(?SERVER),register(?SERVER,Pid)
end,
Pid
.
rec(0) ->
receive
{put,Pid} -> Pid ! {put_success,1},rec(1)
end
;
rec(?NUM) ->
receive
{get,Pid} -> Pid ! {get_success,?NUM-1},rec(?NUM-1)
end
;
rec(N) ->
receive
{get,Pid} -> Pid ! {get_success,N-1},rec(N-1);
{put,Pid} -> Pid ! {put_success,N+1},rec(N+1)
end
.
%%
consume()->
SPid=self(),
?SERVER ! {get,SPid},
receive
{get_success,Num} -> io:format("get successed count:~p~n", [Num]);
_Other -> io:format("get failed~n")
end,
ok
.
%%
produce()->
SPid=self(),
?SERVER ! {put,SPid},
receive
{put_success,Num} -> io:format("put successed count:~p~n", [Num]);
_Other -> io:format("put failed~n")
end,
ok
.
以上これ...まだ少し似ています..
使用同期の生産と消費が0以下の場合消費者が詰まる 100以上で生産者が詰まる
Erlangのreceiveメカニズムは良いです.もしあなたが送ったメッセージが現在詰まっているreceiveに合わなければ、取り出しられません.まだ「ポスト」で一致するreceiveが詰まってから再び出されます.
実行: