boost::asio HTTP Server 3 の例の Connection クラスのコードを参照しますhttp://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/example/http/server3/connection.cpp
各非同期操作が boost::asio::io_service::strand で呼び出されていることがわかります。これにより、完了ハンドラが同時に呼び出されなくなります。ただし、サンプル サーバーは io_service::run を呼び出す複数のスレッドで実行できます。つまり、これらのスレッドのいずれかを使用してハンドラーを呼び出すことができます。この例のハンドラーはすべて、boost::asio::ip::tcp::socket オブジェクトのメソッドを呼び出します。私にとって、これはスレッド間でソケット オブジェクトを共有することです (ただし、同時にメソッドを呼び出すわけではありません)。
ソケット呼び出しの周りに同期が見られないので、質問は、各スレッドがソケット オブジェクトの状態について同じビューを持つことを保証するためにどのようなメカニズムが配置されているかということです。ドキュメントには、boost::asio::ip::tcp::socket のインスタンスを共有することは安全でないと明確に記載されています。