use*_*217 9 sockets boost asynchronous boost-asio
如何通过strand在socket上执行async_*操作?我看过Timer.5(Boost/Asio示例),但它们只展示了如何调用用户的处理程序.当我async_write
在多线程应用程序数据中的套接字可能被写入损坏.并strand
保证这些处理程序不会同时执行.
来自Boost.Asio文档:
io_service::strand 类提供了发布和分派处理程序的能力,并保证这些处理程序不会同时执行。
Boost.Asio示例中有一个很好的用法示例。strand
strand
保证您的处理程序执行将同步。这意味着如果您是从多个线程执行的,那么这strand
很有用。io_service
它与您如何安排任务(处理程序)无关。
strand
无法帮助您同时执行多个套接字读或写操作,因为内部读/写执行不能同时完成,因此应该只有一个活动的读或写异步操作。
您只需reads
调用即可async_read
启动读取序列,并在消耗接收到的数据后从读取处理程序中再次调用它。与在单线程环境中执行的操作相同。
如果writes
有并发生产者(如果多个线程提供要写入套接字的数据),您需要一个并发队列(例如boost 循环缓冲区,查找“有界缓冲区示例”)。您的写入函数从此缓冲区获取数据并将其异步写入套接字。您的写入处理程序调用您的写入函数。