私たちのアプリケーションには、複数のクライアントに接続するサーバーがあります。ご参考までに、これはシングル スレッド アプリケーションです。クライアントが他のクライアントにメッセージを送信したいときはいつでも、サーバーを経由します。クライアントがサーバーにメッセージを送信するたびに、メッセージはDqueue
. サーバーは からメッセージを 1 つずつ抽出し、Dqueue
呼び出しselect()
て、メッセージが送信されるはずのチャネルが使用可能かどうかを確認します。はいの場合は送信します。そうでない場合は、他のメッセージを処理できるように後ろに挿入します。しかし、このアプローチの問題は、クライアントがC1
2 つのメッセージS1
とS2
. サーバーS1
が他のクライアントに送信しようとするとC2
、C2 はビジーであったため、メッセージ S1 をキューの後ろにプッシュします。ここで、処理S2
中にクライアントC2
の準備ができたとします。サーバーは送信できるようになりますS2
。しかし、これの問題は、メッセージがC2
逆順 ( S2
S1
) に到達することです。
同じメッセージ順序を維持できるように、これに適したデータ構造を教えてください。