3

aPidが次のように登録されているとします。

register(foobar, Pid).

次に、関連するpidを置き換えます。

unregister(foobar),
register(foobar, NewPid).

どうすればこれをアトミックに達成できますか?

4

2 に答える 2

1

https://github.com/uwiger/gprocgprocを使用

利点は、そのレジストリが ETS テーブルであり、ETS テーブルにはアトミックな更新があり、必要に応じてアトミックに名前を上書きできることです。私はそれがこの種のことをすることができるとほぼ確信しています。

于 2012-10-04T13:58:30.080 に答える
0

register/2少なくともとunregister/1BIFを使用すると、これは可能ではないと思います。たとえば、gen_serverまたはを使用して、レジストリへの要求をシリアル化する必要がありますETS table

また、次のことも考慮してください。プロセスの登録名はアトムであり、Erlang VM ではアトムであり、制限されており、ガベージ コレクションは行われません。膨大な数のプロセス (リクエストごとに 1 つのプロセスなど) を動的に登録/登録解除している場合、ある時点でアトムが不足する可能性があるため、このアプローチを再考することをお勧めします。

于 2012-10-05T07:21:53.317 に答える