C++ 在多线程程序中使用多个异步等待

C++ 在多线程程序中使用多个异步等待,c++,multithreading,boost-asio,C++,Multithreading,Boost Asio,我有以下程序,摘自 确保永远不会同时运行print1和print2。 然而,我不明白的是main函数是如何解决问题的 我想 boost::thread t(boost::bind(&boost::asio::io_service::run, &io)); 除了主线程io.run()和该 t、 join()阻塞主线程,直到t完成 我不明白的是,什么工作分配给线程t,什么工作分配给主线程。 此外,在两个不同的线程中使用两个async\u wait有什么意义 谢谢,工作分配在现实世界

我有以下程序,摘自

确保永远不会同时运行
print1
print2
。 然而,我不明白的是
main
函数是如何解决问题的

我想

boost::thread t(boost::bind(&boost::asio::io_service::run, &io));
除了主线程
io.run()
和该

t、 join()
阻塞主线程,直到
t
完成

我不明白的是,什么工作分配给线程
t
,什么工作分配给主线程。 此外,在两个不同的线程中使用两个
async\u wait
有什么意义


谢谢,

工作分配在现实世界中并不明显。您可以从多个线程调用
boost::asio::io_service::run()
,这些线程将共享工作负载。根据“池中等待的所有线程都是等效的,io_服务可以选择其中任何一个来调用处理程序。”

在本例中,让异步在两个不同的线程上等待更像是一个展示其工作机制的练习,而不是一个定义良好的用例

我不明白的是,它永远不会同时运行。因此,让两个线程运行这些线程有什么意义

看,一个线程将是一个隐式串,是的

如果单个线程不足以满足您的需要,则可以使用更多线程


计时器有不同的用途,不是每个线程一个。(在
io\u服务
任务中没有线程关联的概念。链是一个没有线程关联的逻辑概念,除非您强制使用前面提到的隐式链)

谢谢您的回答。我不明白的是
strand
确保它永远不会并发运行。因此,让两个线程运行这些处理程序有什么意义呢?串确保它们不会并发运行,而不管哪个线程实际运行处理程序。每个处理程序都可能在自己的线程上运行,但在任何情况下,处理程序都将按照发布的顺序执行。
timer1_.async_wait(strand_.wrap(boost::bind(&Printer::print1, this)));
timer2_.async_wait(strand_.wrap(boost::bind(&Printer::print2, this)));
boost::thread t(boost::bind(&boost::asio::io_service::run, &io));