函数发布到boost :: asio :: io_service :: strand未执行

时间:2013-02-11 14:53:22

标签: boost boost-asio deadlock

我在一个非常复杂的场景中使用boost::asio我遇到的问题是,虽然boost::asio::io_service::strand上的几个工作线程正在运行,但是没有执行发布到io_service对象的方法闲着。

正如我所说,情景非常复杂,我仍在努力开发一个相当小的repro场景。但条件如下:

  • 一个io_service正在运行并且已分配一个工作对象
  • 将4个工作线程分配给io_service(每个都称为io_service::run
  • 几个链对象用于发布许多不同的任务
  • 在通过股线执行的一些任务中,新任务被发布到钢绞线

除一种情况外,整个系统运行良好且稳定: 当调用其中一个类的析构函数时,它会将中止处理程序发布到strand(以启动与其他tak同步的中止),然后等待直到中止完成。 现在每隔一段时间就发生一次,中止处理程序永远不会执行(析构函数是从另一个链对象的调用中调用的)。

我假设问题是,strand等待在已发布的同一线程上执行处理程序。而且由于这个线程正在等待执行中止处理程序,程序死锁。

我现在的问题:   - 我的假设是正确的吗?   - 有什么办法可以避免这种情况吗?   - 你将如何解决这个问题(运行多个异步任务并需要同步中止它们)

Thanx给了你很多帮助!

米。

0 个答案:

没有答案