[erlang-questions] Question regarding problems in Joe's book

Zac Brown <>
Sat Jul 28 13:52:33 CEST 2007


Thanks for the responses guys. I guess I felt almost thrown into the wild 
when I saw that there were problems at the end. I actually figured out the
start(AnAtom, Fun) one, but the ring problem I've made some head way in
but I'm getting stuck with it. I'll post what I have so far and see if
there are any comments.

-module(ring).
-export([start/0, submit/2, loop/0]).


start() ->
    spawn(fun loop/0).

submit(Pid, What) ->
    rpc(Pid, What).


loop() ->
    receive
	{data, Msg, PidList, Curr, Lim} ->
	    case Curr =< Lim of
		true -> [H|T] = PidList,
			rpc(H, {data, Msg, T++H, Curr+1, Lim});
		false -> Msg
	    end,
	    loop();
	_ -> 
	    io:format("Error.~n"),
	    exit("error")
    end.
	    

rpc(Pid, Request) ->
    Pid ! {self(), Request},
    receive
	Response ->
	    Response
    end.


On Sat, 28 Jul 2007 02:07:12 -0400, Toby DiPasquale wrote:

> On 7/27/07, Mike Berrow <> wrote:
>> > .....  but I wonder if anyone knows if there are answers posted
>> > for the problems at the end of section 8? I've been struggling with
>> > working out these problems and am looking to learn from an example.
>>
>> I wondered the same thing. The first problem seems simple, but I am not
>> sure how to prove that it works when "two  parallel processes simultaneously evaluate start/2"
> 
> I believe the answer Joe was looking for was to have a separate
> process that the first n processes send messages to in order to enact
> start(AnAtom, Fun). This guarantees that whichever is first gets the
> success message and those coming afterwards receive the failure
> message in response. This relies on Erlang's message passing
> concurrency to provide a sequencing of events in a parallel
> environment, rather than using shared state.
> 
> In essence, I think its a clever question to make sure you were paying
> the proper attention to the preceding chapter's material ;-) Joe can,
> of course, embellish or correct me if I'm wrong. Joe?





More information about the erlang-questions mailing list