关于boost :: asio :: io

助推文件说,io_service可能以任意方式跨线程分配工作,是否意味着当我使用TCP套接字时,我可能会收到数据混乱? 因为我的接收处理程序可能以任意方式跨线程分发。


当你使用boost io_service来安排一个async_read或者一个读取时,你在一个套接字上工作。 通过socket->read(...)read(socket ...) 。 如果您仔细阅读文档,有一些变体可以接受完成读取的条件,字节数或匹配条件。 使用这个你可以有一个连接,它可以让你说20个字节的数据,并且你可以用10个字节读到一个线程,当这个线程正在处理数据时,接下来的20个字节会转到另一个线程。 有几种情况您可能需要这样做,但通常您会希望每个线程都读取整个数据包。

如果你想确保一次只有一个线程从一个套接字处理你的io,你可以将这个回调包装在一个strand 。 这是一个相当通用的例子,它看起来像什么。

boost::asio::async_read(socket, 
                        buffer(*responseBuffer), 
                        transfer_all(),
                        strand.wrap(boost::bind(&YourClass::handleRead, 
                                                 this, /*or use shared_from_this*/
                                                 placeholders::error)));
链接地址: http://www.djcxy.com/p/62671.html

上一篇: About boost::asio::io

下一篇: service handles only one socket per core