boost :: asio socket async_*strand

use*_*217 9 sockets boost asynchronous boost-asio

如何通过strand在socket上执行async_*操作?我看过Timer.5(Boost/Asio示例),但它们只展示了如何调用用户的处理程序.当我async_write在多线程应用程序数据中的套接字可能被写入损坏.并strand保证这些处理程序不会同时执行.

And*_*hko 4

来自Boost.Asio文档:

io_service::strand 类提供了发布和分派处理程序的能力,并保证这些处理程序不会同时执行。

Boost.Asio示例中有一个很好的用法示例。strand

strand保证您的处理程序执行将同步。这意味着如果您是从多个线程执行的,那么这strand很有用。io_service它与您如何安排任务(处理程序)无关。

strand无法帮助您同时执行多个套接字读或写操作,因为内部读/写执行不能同时完成,因此应该只有一个活动的读或写异步操作。

您只需reads调用即可async_read启动读取序列,并在消耗接收到的数据后从读取处理程序中再次调用它。与在单线程环境中执行的操作相同。

如果writes有并发生产者(如果多个线程提供要写入套接字的数据),您需要一个并发队列(例如boost 循环缓冲区,查找“有界缓冲区示例”)。您的写入函数从此缓冲区获取数据并将其异步写入套接字。您的写入处理程序调用您的写入函数。