我发现 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_
尚未调用其重置的过期。