9

異なるスレッドからのソケットに対する複数の操作は推奨されないことを読みました。しかし、同じスレッド socket.async_read と次の socket.async_write から (前のスレッドが終了するのを待たずに) 呼び出すとどうなるでしょうか? この操作の 1 つが完了すると、適切なコールバックが実行されると期待できますか?

4

1 に答える 1

12

はい、同じソケットでasync_read単一の保留中と単一の保留中を問題なく使用できることがわかりました。async_writeメソッドを呼び出すとio_service::run()、コールバックは期待どおりに完了します。

同じソケットで複数の async_reads を発行するか、同じソケットで複数の async_writes を発行すると、関連するソケットのタイプによっては、予期しない動作が発生する可能性があります。特に、同じ TCP ソケットで複数の async_write を使用すると、当初の予想とは異なる順序でデータが送信され、データ送信が混在する可能性があります。UDP では、より合理的かもしれませんが、それでもお勧めしません。

于 2012-11-29T16:24:28.453 に答える