私は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++ のタグを付けます。