我有什么方法可以使用线程安全协同程序以及boost :: asio?
我希望一个io_service
在多个线程上运行,并让我的一些处理程序成为协同程序。
Boost.Coroutine似乎是一个解决方案,但他们document他们不支持恢复在一个单独的线程中启动的协程。
据我所知,这个问题只有两种可能的解决方案:
两者都没有好的解决方案。在一个解决方案中,我失去了协同程序。在另一方面,我失去了大部分的多线程能力。
答案 0 :(得分:3)
似乎这个问题没有简单的解决方法。
主要问题可能是由于C ++允许编译器重新排序函数中发生的大部分内容。因此,您无法可靠地依赖函数中发生的事情的顺序。
看起来我将不得不最终使用一系列回调,如果我希望保持所有内容在语义上都像代码块一样,可能会使用lambda。
也许我甚至可以使用解析为lambdas的宏来模拟协程样式。