Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

自習メモ〜プロセス名の登録

前のエントリに続いて、Erlangマニュアルをやってみました。3.3 Registered Process Namesです。

%
% @see http://www.erlang.org/doc/doc-5.5.4/doc/getting_started/conc_prog.html
%
-module(tut16).
-export([ping/1, pong/0, start/0]).

ping(0) ->
    registerd_name ! finished,
    io:format("ping finished~n", []);
ping(N) ->
    registerd_name ! {ping, self()},
    receive
        pong ->
            io:format("Ping received pong~n", [])
    end,
    ping(N - 1).

pong() ->
    receive
        finished ->
            io:format("Pong finished~n", []);
        {ping, Ping_PID} ->
            io:format("Pong received ping~n", []),
            Ping_PID ! pong,
            pong()
    end.

start() ->
    register(registerd_name, spawn(?MODULE, pong, [])),
    spawn(?MODULE, ping, [3]).

へぇ、GLOBAL変数っぽく使えるんだ。多用すると大変そうだけど、便利だ。
上のサンプルはマニュアルそのままではなく、registerした名前が分かるよう「registerd_name」に変えてあります。ちなみに、register/2のリファレンスは以下。