私は全二重サーバーを作成するためにboost::asioライブラリを使用しています。このような状況が起こる可能性があるのだろうかと思います。全二重通信のためにboost :: asioを使っているのは本当ですか?
- 独自のバッファに格納されているリクエストを受け取りました。
- 応答データを独自のバッファに格納しました。
- 私は応答を非同期的に送信し始めています。
- 新しいリクエストをしました。
- 前回入力したのと同じバッファに応答データを入力しました。
- まだ完了していない以前の書き込み操作のバッファは、新しい応答データで破損しています。
質問は私が書き込み操作ごとに別々のバッファを必要とするかどうか、またはバッファが何らかの種類の内部バッファにコピーされていて、同じバッファ内に新しい応答を書き込むことができますか?
「あなたが記述した状況はシングルスレッド環境で動作するはずです。プロセスがバッファに追加して同時に書き込みに使用することができないからです。私が記述した状況は、まさに非同期書き込みが開始されたときにバッファに書き込む状況です。 – bobeff
次の* async_write *を開始する準備ができたら、進行中の* async_write *操作があるかどうかを検出し、前回の終了時に次の* async_write *を開始する方法を提案できますか? – bobeff
async_writeが開始され、バッファにデータを追加するシングルスレッドの状況では、プロセスはその時点で1つのジョブしか実行しません。したがって、バッファに競合条件はありません。 2番目の質問:async_writeが処理中であることを示すフラグを設定します(ハンドラが呼び出されたときにフラグをリセットします) – PSIAlt