boost docは、io_serviceがスレッド間で任意の方法で作業を分散する可能性があると言います。つまり、TCPソケットを使用しているときにデータが混乱する可能性がありますか?私の受信ハンドラはスレッド間で任意の方法で配布される可能性があるためです。についてboost :: asio :: io_service :: run into multithread
1
A
答えて
2
ブーストio_service
を使用してasync_readまたはreadをスケジュールすると、ソケットで動作します。 socket->read(...)
またはread(socket ...)
のいずれかを使用します。ドキュメントを調べると、読み込み、バイト数、または一致条件の終了基準を受け入れるバリエーションがいくつかあります。これを使用すると、20バイトのデータが10バイトで1つのスレッドに読み込まれ、そのスレッドがデータを処理している間に次の20バイトが別のスレッドに渡る接続ができます。いくつかのケースがありますが、通常は各スレッドがパケット全体を読み取る必要があります。
一度に1つのスレッドだけがソケットからioを処理するようにしたい場合は、コールバックをstrand
にラップすることができます。これは、そのように見えるもののかなり一般的な例です。
boost::asio::async_read(socket,
buffer(*responseBuffer),
transfer_all(),
strand.wrap(boost::bind(&YourClass::handleRead,
this, /*or use shared_from_this*/
placeholders::error)));
関連する問題
- 1. boost :: asio :: io_service :: runから例外をキャッチできません
- 2. 私がboost :: asio :: io_serive :: stop()を呼び出すと、boost :: asio :: io_service :: run()が終了しない
- 3. boost :: asio :: io_serviceが例外をスローする
- 4. boost :: asio :: io_service :: run_one()の使用方法
- 5. boost :: asioソケットとブロッキングについて
- 6. boost :: asio io_service :: run_oneはセグメンテーションフォールトにつながります
- 7. async_readを実行している間、boost :: asio :: io_service async_writeループ中に
- 8. boost :: asio :: io_service :: run()によってスローされた例外をキャッチする必要がありますか?
- 9. boost asio unix socket reuse
- 10. stop()の後にboost :: asio :: io_serviceをクリアします。
- 11. select()をboost :: asio :: io_serviceに置き換える
- 12. boost :: asio :: io_serviceでメインのデータを取得します
- 13. io_service-per-CPUでboost :: asio :: spawnを実行する方法は?
- 14. を使ってBOOST ASIOバッファー
- 15. C++ Boost ASIOソケットエラー
- 16. Boost Asio io_service、クライアントからのメッセージを読む
- 17. boost :: asio :: io_service占有タイマーとポストのキュー長
- 18. boost :: asio :: io_service - なぜポスト関数を使うのですか?
- 19. boost :: asio :: io_serviceはハンドラの順序を保持しますか?
- 20. プラグイン間でboost :: asio :: io_serviceを共有する方法[modules]
- 21. boost :: asio :: strand && boost :: lockfree :: spsc_queue
- 22. boost :: asio double buffering
- 23. boost asio multicast join
- 24. なぜboost :: asio :: io_service :: workを使用する必要がありますか?
- 25. boost :: property_tree :: read_xml boost :: asio :: spawnを使用して生成されたasioハンドラのsegfaults
- 26. io_service :: runを使用しているときにメモリリークが発生する
- 27. Boost :: Asio :: Ip :: Tcp :: Iostream質問
- 28. Boost :: asioとasync_read
- 29. シンプルなデータ送信:Boost :: asio?
- 30. 複数のリスニングソケットに同じboost :: asio :: io_serviceを使用できますか?
あなたのユースケースに関する詳細を教えてください。一般的には、単一のソケットへのアクセスを保護するために、ストランドを使用しています。アプリケーションは複数の異なる接続を同時に通信しますが、単一のソケットの要求は順次処理されます。 – mark