有没有办法在使用boost::asio的同时拥有线程安全的协程?
我想要一个
据我所知,这个问题只有两种可能的解决方案:
1. 不使用协程。使用更加冗长(即使使用lambda表达式也是如此),但同样功能的回调链接方法来存储状态。 2. 强制每个处理程序仅在一个线程中运行。我知道这可以通过为每个线程设置单独的io_service来实现。顺便说一下,是否有一种简单的方法,类似于io_service::strand,可以强制一组处理程序在同一个线程中运行?
两者都不是好的解决方案。在一个解决方案中,我失去了协程。在另一个解决方案中,我失去了大部分的多线程能力。
我想要一个
io_service
在多个线程上运行,并且让一些处理程序成为协程。
Boost.Coroutine似乎是一个解决方案,但他们文档中指出,他们不支持恢复在另一个线程中启动的协程。据我所知,这个问题只有两种可能的解决方案:
1. 不使用协程。使用更加冗长(即使使用lambda表达式也是如此),但同样功能的回调链接方法来存储状态。 2. 强制每个处理程序仅在一个线程中运行。我知道这可以通过为每个线程设置单独的io_service来实现。顺便说一下,是否有一种简单的方法,类似于io_service::strand,可以强制一组处理程序在同一个线程中运行?
两者都不是好的解决方案。在一个解决方案中,我失去了协程。在另一个解决方案中,我失去了大部分的多线程能力。