在asio :: io_service中插入对象。 asio :: io_service :: run()在多个线程中运行。 期望在队列中完成任何对象的可能性是必要的。 例如:
template <typename T>
struct handler {
void operator()() {
....
}
T get() const {...}
};
asio::io_service ios;
ios.post(handler());
感谢。
答案 0 :(得分:1)
到目前为止我所知道的是:
1.几个处理程序正在多个线程上执行
2.处理程序彼此独立运行。数据/竞争条件的线程之间不需要同步
3.可以在任何处理程序上调用Get。当调用处理程序时应该停止计算并让另一个线程调用handler :: get()。
这看起来更像是一个多线程/并发问题,然后是一个boost :: asio问题。目前我认为不需要使用io_service。看起来几个线程可以在没有io_service的情况下启动,并且可以在线程之间使用一些同步。
调用Handler :: get()的线程需要等到运行operator()的io_service线程完成计算才能返回。
考虑使用条件变量。 handler :: get()方法可以等到条件满足(即operator()完成其计算)。运行operator()的io_service线程将通过条件变量通知主线程。
通过条件变量通知另一个线程的一个线程的示例是here。