2

私は約10個のオブジェクトを持っています。各オブジェクトは異なるクラスです。これらのオブジェクトに送信されるリクエスト (値を返すメソッド呼び出し) は、異なるスレッドから送信されます。

これらのメソッド呼び出しを同期する必要があり、一度に 1 つだけ実行する必要があります。一部の要求は、他の要求よりも優先度が高くなります。これは、実行待ちのリクエストがさらにあり、別のリクエストが送信された場合、他の実行待ちのリクエストよりも高い優先度で、次のリクエストとして実行されることを意味します。

C++ でこの問題を解決する方法がわかりません。コマンドパターンについて考えていましたが、多くの「手動」コーディングが必要になります。各メソッド呼び出しをコマンド オブジェクトに変換する必要があります。そして問題は戻り値にあります。ここでどのパターンを使用できるか、誰にも考えがありますか?

4

1 に答える 1

4

同期の場合、一度に 1 つのスレッドのみがオブジェクトを操作するように、何らかの形式の相互排除を使用できます。

優先度を扱う場合、どのタイプのリクエストがより優先度が高いかを判断するためのコンパレーターを備えた優先度キューが必要になるでしょう。

各オブジェクトはアクションを実行するリクエストを受け入れ、それに関連付けられた優先度とアクションを持ちます(コマンドパターンで提案したように)。ロックメカニズムを使用して、レコードを追加して優先度キューを更新し、その後解放します。複数のスレッドを介してアクセスされるため、キューをロックする必要があります。明示的な並べ替えは必要ありません。キューは常に優先度の高い順に並べられます。したがって、コマンドを処理するには、キュー内の最初のアイテムがあればそれを取得し、アクションを実行します。

于 2013-04-20T04:38:35.813 に答える