我发现 asio 关于同步的文档strand是晦涩难懂的。它只是说在线程池设计 asio 应用程序中,处理程序可以在任何具有 call 的线程中运行io_service::run()。使用 astrand扭曲这些处理程序可以使它们的执行正确并发。在它的example3中,所有handle_read的都是 wrap by strand,我认为Connection类中的变量,比如buffer已经同步过strand,不同的线程调用handle_read会得到最新的数据,没关系。但是如果在类中定义了Connection一个也被处理程序访问的数据成员没有被包装strand呢?我认为这是一个问题,不是吗?
在其文档example3中,为什么handle_accept不被 a 包裹strand?由new_connection_多线程访问:new_connection_.reset由线程Aserver::handle_accept调用并由线程B调用。我认为它需要在这里进行数据同步,否则线程B可能会使用new_connection_尚未调用其重置的过期。