boost asio是否按顺序调用异步处理程序

时间:2013-04-17 17:06:51

标签: multithreading thread-safety boost-asio

如果我启动一个asio计时器并且在一个单独的线程上接收到我的主线程,那么处理程序是否可以同时运行?我假定没有,并且单独的线程即使它们同时准备好也会顺序调用事件。要同时调用处理程序,asio必须创建自己的(第3个)线程,甚至中断一个处理程序来运行另一个。我找不到文档说即使看起来很可能也会按顺序调用处理程序。

1 个答案:

答案 0 :(得分:3)

如果多个线程正在为io_service的事件循环提供服务,例如调用io_service::run()的线程池,则处理程序可以同时执行。另一方面,如果只有一个线程为io_service提供服务,那么确保回调处理程序不会同时运行,因为Boost.Asio保证回调处理程序只会从当前调用的线程{{1 }}。 Boost.Asio Timer.5 - Synchronising handlers in multithreaded programs 教程可以提供更多关于此主题的见解。