Skip to content
Erlang

Ping-Pong 프로세스

두 프로세스가 spawn과 receive로 메시지를 주고받는다.

#spawn#send#receive#concurrency

Code

erlang
-module(pingpong).
-export([start/1]).

start(N) ->
    Pong = spawn(fun() -> pong() end),
    Ping = spawn(fun() -> ping(N, Pong) end),
    ok.

ping(0, _Pong) ->
    io:format("ping done~n");
ping(N, Pong) ->
    Pong ! {ping, self()},
    receive
        pong -> io:format("ping received pong~n")
    end,
    ping(N - 1, Pong).

pong() ->
    receive
        {ping, From} ->
            io:format("pong received ping~n"),
            From ! pong,
            pong();
        stop ->
            ok
    end.

% Usage:  pingpong:start(3).