multithreading - Boost Asio是否按顺序调用异步处理程序

标签 multithreading thread-safety boost-asio

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

最佳答案

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

关于multithreading - Boost Asio是否按顺序调用异步处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16066007/

相关文章:

c++ - boost read_until 不会在定界符处停止

multithreading - "EOSError 1400 - Invalid window handle"的可能原因

c++ - DLL 和应用程序之间的互斥锁共享

c# - 为什么在调用的方法中使用 ThreadStaticAttribute 字段而不是局部变量?

c# - 队列和并发队列的 TryDequeue 方法之间的区别

c - 线程安全与可重入

c# - 为什么要对单独的对象执行锁定?

java - 使用生产者-消费者模式的多代理系统?

c++ - boost asio timer 是否预计会在 `cancel` 上阻塞?

boost - 如何从 boost::asio::streambuf 获取二进制数据