从多个线程调用 boost::asio::io_service 运行函数
Posted
技术标签:
【中文标题】从多个线程调用 boost::asio::io_service 运行函数【英文标题】:Calling boost::asio::io_service run function from multiple threads 【发布时间】:2018-02-12 10:32:57 【问题描述】:在我的服务器应用程序中有一个线程池调用 io_service run() 函数。当处理程序抛出异常时,run 函数也会抛出该异常。多个线程在 try catch 块中调用 run 函数。要重新启动事件处理程序,我需要再次调用 run,但文档指出必须首先调用 restart()。重新启动 io_service 必须确保所有运行调用都已完成。当其他线程仍在调用 run 函数时,我该怎么做?
【问题讨论】:
所有run
调用特定的io_service
对象。
只有一个 io_service 对象,多个线程调用在该对象上运行
【参考方案1】:
要重新启动事件处理程序,我需要再次调用 run,但文档指出必须首先调用 restart()。
没有文档确实没有这么说。一旦服务停止工作/停止,您需要重置。你都没有这样做,所以你不需要在那里重置。
只需按照本文Should the exception thrown by boost::asio::io_service::run() be caught? 中的说明进行操作(链接到docs)
【讨论】:
以上是关于从多个线程调用 boost::asio::io_service 运行函数的主要内容,如果未能解决你的问题,请参考以下文章
从多个线程调用 boost::asio::io_service 运行函数
由 Dispatcher.Invoke 从多个线程调用的代码中的死锁