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));