-module(counter_server). -export([start/0, incr/1, read/1, stop/1]). start() -> spawn(fun () -> loop(0) end). loop(N) -> receive {incr, From, Ref} -> From ! {incr_reply, Ref}, loop(N + 1); {read, From, Ref} -> From ! {read_reply, Ref, N}, loop(N); stop -> ok end. incr(Server) -> Ref = make_ref(), Server!{incr, self(), Ref}, receive {incr_reply, Ref} -> ok end. read(Server) -> Ref = make_ref(), Server!{read, self(), Ref}, receive {read_reply, Ref, X} -> X end. stop(Server) -> Server!stop.