Akka を使用して複数のリーダー/1 つのライターのパターンをデータ構造に実装したいのですが、アクター モデルの設計に行き詰まっています。
私が最初に考えたのは、外部要求 (読み取りまたは書き込み) を受け取るスーパーバイザー アクターを用意することでした。読み取り要求は、非同期処理のためにリーダー アクターに転送されます。書き込み要求は、すべてのリーダーが終了するのを待ってから、同期的に処理されます。
私の問題は、「すべての読者が終了するのを待つ」部分をどのように実装するかです。
私は最初、スーパーバイザーにカウンターを置くことを考えました。カウンタは、スーパーバイザがメッセージをリーダーに転送するたびにインクリメントされます。リーダーは、終了時に「I am done」メッセージをスーパーバイザーに送り返し、カウンターを減らします。ただし、「I am done」メッセージは外部要求と同じメールボックスに送られるため、これはデッドロックにつながると思います。スーパーバイザが書き込み要求を同期的に処理していた場合、「I am done」がそれに到達することはありません。
私は本当にデザインにこだわっています。どんな助けでも大歓迎です。