我在一个非常复杂的场景中使用boost::asio
我遇到的问题是,虽然boost::asio::io_service::strand
上的几个工作线程正在运行,但是没有执行发布到io_service
对象的方法闲着。
正如我所说,情景非常复杂,我仍在努力开发一个相当小的repro场景。但条件如下:
io_service::run
)除一种情况外,整个系统运行良好且稳定: 当调用其中一个类的析构函数时,它会将中止处理程序发布到strand(以启动与其他tak同步的中止),然后等待直到中止完成。 现在每隔一段时间就发生一次,中止处理程序永远不会执行(析构函数是从另一个链对象的调用中调用的)。
我假设问题是,strand等待在已发布的同一线程上执行处理程序。而且由于这个线程正在等待执行中止处理程序,程序死锁。
我现在的问题: - 我的假设是正确的吗? - 有什么办法可以避免这种情况吗? - 你将如何解决这个问题(运行多个异步任务并需要同步中止它们)
Thanx给了你很多帮助!
米。