首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于boost::asio::io_service::run到多线程

关于boost::asio::io_service::run到多线程
EN

Stack Overflow用户
提问于 2012-01-27 21:24:52
回答 1查看 842关注 0票数 1

boost文档说io_service可能会以任意的方式跨线程分配工作,这是不是意味着当我使用TCP socket时,我可能会接收到混乱的数据?因为我的接收处理程序可以以任意方式跨线程分布。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-30 08:27:18

当您使用boost io_service调度async_read或读取时,您是在套接字上操作。通过socket->read(...)read(socket ...)。如果您浏览一下文档,就会发现有一些变体接受完成读取、字节数或匹配条件的标准。使用这个,你可以有一个连接,给你20个字节的数据,你把它以10个字节读到一个线程,当那个线程处理数据时,接下来的20个字节去到另一个线程。在少数情况下,您可能希望这样做,但通常您会希望每个线程读取整个包。

如果您希望确保一次只有一个线程处理来自套接字的io,则可以将回调包装在strand中。这是一个相当通用的例子,说明了这是什么样子。

代码语言:javascript
复制
boost::asio::async_read(socket, 
                        buffer(*responseBuffer), 
                        transfer_all(),
                        strand.wrap(boost::bind(&YourClass::handleRead, 
                                                 this, /*or use shared_from_this*/
                                                 placeholders::error)));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9033885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档