根据帖子,在give_away之后,如果创建进程死掉,进程SomeOtherProcess会收到表单{'ETS-TRANSFER', TableId, OldOwner, GiftData}错误的消息。当调用 give_away/3时,SomeOtherProcess 立即成为新的所有者进程并接收此消息,即使创建者没有死亡。
正如您所说,也没有必要处理退出信号,但您可能希望在接收退出消息时执行任何其他操作。(还处理赠品链,将表从所有者等处取回给创建者)
通常我遇到的是“ETS-TRANSFER”消息出现在“EXIT”之前,但我们无法对此进行回复。因此,正如 Roberto Aloi 所提到的,我们可以进行选择性接收。选择性接收是使用嵌套接收实现的。例子
receive
{'EXIT', Pid, Reason} ->
receive
{'ETS-TRANSFER', TableId, OldOwner, HeirData} ->
got_table
after 0 ->
ignore
end
after 0 ->
ignore
end.
LearnYouSomeErlang has good explanation of selective receive and why/how to avoid it to give priority to messages received.