aPid
が次のように登録されているとします。
register(foobar, Pid).
次に、関連するpidを置き換えます。
unregister(foobar),
register(foobar, NewPid).
どうすればこれをアトミックに達成できますか?
https://github.com/uwiger/gprocgproc
を使用
利点は、そのレジストリが ETS テーブルであり、ETS テーブルにはアトミックな更新があり、必要に応じてアトミックに名前を上書きできることです。私はそれがこの種のことをすることができるとほぼ確信しています。
register/2
少なくともとunregister/1
BIFを使用すると、これは可能ではないと思います。たとえば、gen_server
またはを使用して、レジストリへの要求をシリアル化する必要がありますETS table
。
また、次のことも考慮してください。プロセスの登録名はアトムであり、Erlang VM ではアトムであり、制限されており、ガベージ コレクションは行われません。膨大な数のプロセス (リクエストごとに 1 つのプロセスなど) を動的に登録/登録解除している場合、ある時点でアトムが不足する可能性があるため、このアプローチを再考することをお勧めします。