Здравствуйте, abch-98-ru, Вы писали:
A9R>Здравствуйте, remark, Вы писали:
R>>Дедлок при обмене сообщениями — как 2 пальца. Один поток ждёт ответа от второго, второй — от первого. Естественно схемы дедлоков в реальных приложениях могут быть и сложнее — затрагивать больше потоков.
A9R>А это... ну... а можно примерчик, работающий на erlang-е. Демонстрирующий дедлок, который честно распадается по таймеру. (! и receive ... after видимо)
A9R>А то меня это дискуссия подвигла залезть на erlang.org, но скиллзов на что-то кроме пинг-понга пока не хватает
A9R>Я даже слово волшебное знаю, пожалуйста
в общем пока монстры спорят о философии — мы тут плюшками балуемся. видимо как-то оно так выглядет на erlange ( c учетом моих более чем скромных познаний в нем). все пример, дедлока привел(если after убрать, то вечный, а так по таймауту все разрулится), можно пересесть к зрителям.
-module(dl).
-export([start/0, dl/2]).
dl(P1,P2) ->
receive
{P1, A}->
A ! {P2, self()},
io:format("got dl with ~p ~p ~n", [P1,P2])
after
5000 ->
io:format("timeout dl with ~p ~p ~n", [P1,P2])
end.
start() ->
spawn (dl, dl, [p1,p2]),
spawn(dl, dl, [p2,p1]).