首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ets表继承和trap_exit消息

ets表继承和trap_exit消息
EN

Stack Overflow用户
提问于 2013-03-07 17:46:45
回答 1查看 262关注 0票数 2

在阅读“学习一些Erlang”时,我发现我可以为给定的ets表设置一个进程继承人,该表将接收消息:

代码语言:javascript
复制
{'ETS-TRANSFER', TableId, FromPid, Data}

当拥有该表的进程终止时。

过了一段时间,我发现了这个post,它对如何使用这些特性保存ets表有不同的建议。

在最后一种方法中,用户还建议使用trap_exit,以便知道拥有该表的对等进程是否已死。现在我的问题是:我应该先收到哪条消息?关于ets表的消息还是关于对等进程崩溃的消息?

真的有必要处理退出消息吗?当我收到ets消息时,我知道处理它的对等进程是绝对正确的?或者它还活着一段时间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-09 03:11:28

根据这篇文章,在give_away之后,如果创建进程终止,进程SomeOtherProcess将收到表单{'ETS-TRANSFER', TableId, OldOwner, GiftData} is give_away的消息。当调用give_away/3时,SomeOtherProcess立即成为新的所有者进程,并接收此消息,即使创建者没有死亡。

正如您所说的,实际上也没有必要处理退出信号,但您可能希望在接收到退出消息时执行任何其他操作。(还要处理give_away链,将表从所有者那里取回给创建者等)

通常,我遇到的是'ETS-TRANSFER‘消息出现在'EXIT’之前,但我们不能对此进行回复。因此,正如Roberto Aloi所提到的,我们可以进行选择性接收。选择性接收是使用嵌套接收实现的。示例

代码语言:javascript
复制
receive
    {'EXIT', Pid, Reason} ->
        receive
            {'ETS-TRANSFER', TableId, OldOwner, HeirData} ->
                got_table
        after 0 ->
                ignore
        end 
after 0 ->
        ignore
end.

LearnYouSomeErlang很好地解释了选择性接收,以及为什么/如何避免它以优先于接收的消息。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15267837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档