如果我启动一个asio计时器并且在一个单独的线程上接收到我的主线程,那么处理程序是否可以同时运行?我假定没有,并且单独的线程即使它们同时准备好也会顺序调用事件。要同时调用处理程序,asio必须创建自己的(第3个)线程,甚至中断一个处理程序来运行另一个。我找不到文档说即使看起来很可能也会按顺序调用处理程序。
答案 0 :(得分:3)
如果多个线程正在为io_service
的事件循环提供服务,例如调用io_service::run()
的线程池,则处理程序可以同时执行。另一方面,如果只有一个线程为io_service
提供服务,那么确保回调处理程序不会同时运行,因为Boost.Asio保证回调处理程序只会从当前调用的线程{{1 }}。 Boost.Asio Timer.5 - Synchronising handlers in multithreaded programs 教程可以提供更多关于此主题的见解。