【发布时间】:2019-10-16 22:10:27
【问题描述】:
正如 boost 文档所述 here,boost::asio::io_context::run() 函数会阻塞,直到所有工作完成并且没有更多的处理程序要分派,或者直到 io_context 已停止。
现在我很困惑,为什么我的代码位于另一个处理程序调度 (t.join()) 之前直到所有处理程序都完成了工作才执行。
我试过boost asio教程Timer.5 - Synchronising handlers in multithreaded programs
我在 io.run() 之后添加了一行代码:
int main()
{
boost::asio::io_context io;
printer p(io);
boost::thread t(boost::bind(&boost::asio::io_context::run, &io));
io.run();
std::cout << "between run and join" << std::endl;
t.join();
return 0;
}
以下是控制台输出:
Timer 2: 0
Timer 1: 1
Timer 2: 2
Timer 1: 3
Timer 1: 4
Timer 2: 5
Timer 2: 6
Timer 1: 7
Timer 2: 8
Timer 1: 9
between run and join
Final count is 10
我想知道为什么 t.join() 在我的 std::cout << "between run and join" << std::endl; 代码之前执行?我希望输出“在运行和加入之间”在所有第二个线程的输出之前。
我想我一定是迷路了。
【问题讨论】:
标签: c++ multithreading boost-asio boost-thread