首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用asio的线程安全协同

使用asio的线程安全协同
EN

Stack Overflow用户
提问于 2011-12-19 04:22:56
回答 1查看 2.2K关注 0票数 9

有什么方法可以让线程安全的协同和boost::asio一起使用吗?

我希望在多个线程上运行一个io_service,并让我的一些处理程序成为协同器。

Boost.Coroutine似乎是一个解决方案,但他们表示不支持恢复在单独线程中启动的协同线。

据我所知,这个问题只有两种可能的解决办法:

  1. 不要用协同剂。使用更详细的方法(即使使用lambda),但是使用同样功能的方法来链接存储状态的回调。
  2. 强制每个处理程序只在一个线程中运行。我知道,只要为每个线程设置一个单独的io_service,就可以做到这一点。顺便说一句,是否有一种类似于io_service::strand的简单方法来强制一组处理程序在同一个线程中运行?

从任何方面来说都不是好的解决办法。在一个解决方案中,我失去了合作伙伴关系。在另一种情况下,我失去了大部分的多线程能力。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-22 04:30:48

这个问题似乎没有容易解决的办法。

主要问题可能是由于C++允许编译器重新排序函数中发生的大部分内容。因此,您无法可靠地依赖于函数中发生的事情的顺序。

看起来我将不得不使用一系列回调,如果我想让所有东西看起来都像代码块一样的话,可能会使用lambda。

也许我甚至可以使用宏来破解一些东西,这些宏决定使用lambdas来模拟coroutine样式。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8557067

复制
相关文章

相似问题

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