【发布时间】:2013-02-08 23:24:30
【问题描述】:
我发现 asio 关于strand 同步的文档是晦涩难懂的。它只是说在线程池设计 asio 应用程序中,处理程序可以在任何调用 io_service::run() 的线程中运行。使用strand 扭曲这些处理程序可以使它们的执行正确并发。在其example3中,所有handle_read都被strand包裹,我认为Connection类中的变量如buffer已经被strand同步,不同的线程调用handle_read会起来-最新数据,没关系。但是在Connection 类中定义的一个数据成员也被处理程序访问但未被strand 包装呢?我认为这是一个问题,不是吗?
在其文档example3 中,为什么handle_accept 没有被strand 包裹? new_connection_ 由多线程访问:new_connection_.reset 由线程 A 调用,server::handle_accept 由线程 B 调用。我认为它需要在这里进行数据同步,否则线程 B 可能会使用其过期的 new_connection_尚未调用 reset。
【问题讨论】:
标签: boost-asio