2

我需要以原子方式启动多个主管子级。也就是说,如果组中的一个孩子在启动时失败,那么他们都不应该启动。

我将此操作视为一个函数:

start_children(SupRef, ChildSpecs)
ChildSpecs = List :: [child_spec()]

我应该如何以适当的方式实现这一点?任何示例,库等?我的直觉告诉我,从列表中启动所有孩子,检查他们是否都成功,然后杀死剩下的孩子不是办法。

或者也许我的设计有缺陷,我真的不需要做这些事情?

4

1 回答 1

2

OTP 的主管one_for_all通过该策略为此提供支持。默认情况下,如果某个进程失败,所有进程都会重新启动,但您可以使用适合您目的的Restart参数(例如temporary)来更改此设置。

于 2012-04-20T13:04:55.213 回答