[Erlang] Стоит ли ждать ответа от порожденных потоков
От: cadet354 Россия
Дата: 24.03.09 14:54
Оценка:
Доброго времени, смотрю презентацию Erlang Programming for Multi-core Ulf Wiger,
там он приводит пример pmap который при возникновении ошибки должен прекратить работу и остановить работу порожденных потоков
-module(test_pmap).
-export([pmap2/2]).
spawn_jobs2(F, L) ->
    Parent = self(),
    [spawn(fun(X1) -> Parent ! {self(),catch {ok,F(X1)}} end) || _X <- L].

pmap2(F, L) -> await2(spawn_jobs2(F, L)).

await2([H|T]) ->
    receive
            {H, {ok, Res}} -> [Res | await2(T)];
            {H, {'EXIT',_} = Err} ->
                [exit(Pid,kill) || Pid <- T],% тут посылаем всем приказ умереть
                [receive {P,_} -> d_ after 0 -> i_ end || P <- T], %как я понял здесь ждем подтверждения об окончании работы, 
                                                                                                                     %смысл этого, плюс совершенно не понятен синтаксис, что за d_ и i_
                erlang:error(Err)
    end;
await2([]) -> [].
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.