从多个线程调用 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 运行函数的主要内容,如果未能解决你的问题,请参考以下文章

从多个线程调用 Console.WriteLine

从多个线程调用 boost::asio::io_service 运行函数

由 Dispatcher.Invoke 从多个线程调用的代码中的死锁

从 C/C++ 程序调用的多个操作系统线程上的多个独立嵌入式 Python 解释器

优雅的断言函数不是从多个线程调用的

提升 asio 行为 - 从多个线程调用 ios_service::run