【发布时间】:2016-10-02 22:51:24
【问题描述】:
代码:
在线程 1 中:
boost::async_read(socket, buffer, strand.wrap(read_handler));
在线程 2 中:
strand.post([](){socket.async_write_some(buffer, strand.wrap(write_handler))});
很明显,read_handler、async_write_some、write_handler受strand保护,不会并发。但是,async_read 是一个组合操作,它会调用 async_read_some 零次或多次,这些 async_read_some 也需要 strand 保护,否则它们可能与线程 2 中的 async_write_some 并发。
但是从代码来看,strand只包裹read_handler,asio如何让所有中间操作(async_read_some)也被strand包裹?
【问题讨论】:
标签: boost-asio