курю мануал про ф-ию анлинк, вот пример из сайта erlang.org
unlink(Id),
receive
{'EXIT', Id, _} ->
true
after 0 ->
true
end
скажите может ли быть такое, что перед анлинк отвалился процесс, но месага 'EXIT' придет после отработки кода receive ... end?
-
Отправлено 1 год назад #
-
Думаю, что заботиться о моменте прихода соощения 'EXIT' до микросекунд не надо. В подобных вопросах луч?е доверять реализации Эрланга. Если в доке пи?ут о гарантированном разрыве связи между процессами на момент возвращения результата unlink/1, значит так оно и есть. ? оставался только риск, что до возвращения unlink в очереди находилось или появилось сообщение 'EXIT'.
Сообщение 'EXIT' формируется из сигнала если установлен флаг trap_exit.
Логично если сделано так: сигнал проходит между процессами как бы в единый момент времени, с задержкой 0 мс. Он может возникнуть либо до возвращения результата unlink, либо после возвращения. В случае "до" сигнал преобразуется в сообщение 'EXIT' и помещается в очередь. ?менно эта ситуация обрабатывается receive в примере вы?е. Если trap_exit не стоял, то линкующий процесс прекратит свое существование немедленно по исключению, так и не выполнив unlink.?спользование здесь "момента возвращения результата" законно, т.к. в документации пи?ут о гарантии.
Отправлено 1 год назад # -
а если два процесса на разных узлах и скорость по сети Очень медленная. тогда должна быть некая синхронизация по типу отправил-получил-уведомил. но ничего подобного я в мануле не на?ел. Как обстоит дело с erlang-questions@erlang.org - они охотно отвечают и отвечают ли вообще? Если я к ним обращусь с этим вопросом?
Отправлено 1 год назад # -
Можно попробовать.
Было бы интересно узнать, что они ответят.Отправлено 1 год назад #
