0

私は2人のメンバーを持つクラスを持っています:

RequestController {
  public:
    SendRequest();  // called by multiple threads synchronously
  private:
    server primary;   // This is the primary server
    server backup;    // This is the back up server.
}

私の論理は単にこれです:

SendRequest()で、リクエストをプライマリサーバーに送信したい、失敗した場合はバックアップサーバーに送信したい、パスした場合はプライマリサーバーとバックアップサーバーを入れ替えたい。

ここで問題が発生します。スワッピングを行うとき、プライマリとバックアップをロックする必要があります (これは、複数のスレッドが同時に実行できない場所です)。実際、スワップするときに、スレッドがプライマリサーバーを読み取っていないことを確認する必要があります。このコードを効率的に書くにはどうすればよいでしょうか? ほとんどの場合、プライマリサーバーは機能しており、ロックする必要はないため、すべてをロックしたくありません。

一般的に、この問題は言語に依存しないと思います。とにかく、これに C++ のタグを付けます。

4

1 に答える 1