2

アトミックな方法で複数のスーパーバイザーの子を開始する必要があります。つまり、グループ内の子の1つが起動時に失敗した場合、どの子も起動しないでください。

私はこの操作を関数として見ています:

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

これを適切な方法で実装するにはどうすればよいですか?例、ライブラリなどはありますか?私の直感によると、リストからすべての子を開始し、すべてが成功したかどうかを確認してから、残りの子を殺すのは方法ではありません。

それとも、私のデザインに欠陥があり、本当にそのようなことをする必要はないのでしょうか?

4

1 に答える 1

2

OTP のスーパーバイザーone_for_allは、戦略でこれをサポートします。デフォルトでは、一部のプロセスが失敗した場合、すべてのプロセスが再起動されますが、目的に適したRestartパラメーター (例: temporary) を使用してこれを変更できます。

于 2012-04-20T13:04:55.213 に答える