假设我有许多使用boost :: statechart定义的异步状态机.用于运行多个异步状态机的明确记录的机制是将一个或多个异步状态机固定到线程.但是,出于我的目的,我需要运行许多很多异步状态机,每个线程一个不会.此外,任何给定状态机完成的工作量是不可预测的,因此将状态机分配给固定线程将导致不平衡.
相反,我想要一个线程池,其中空闲线程可以从队列中获取一些工作量.需要注意这一点,以便按顺序传递给定状态机的事件.据推测,开始的地方将涉及实现调度程序和可能的FifoWorker概念,以分别执行我想要的替代fifo_scheduler和fifo_worker类的操作.但是,我想知道这个问题是否已经被其他人解决了,或者我是否只是提出了错误的问题.
最佳答案 回答我自己的问题,现在我有时间考虑一下.这很简单:
>每个状态机都有自己的fifo_scheduler
>当我们希望状态机开始运行时,会向线程池发布一个函数:
>检查scheduler.terminated()并停止,如果是这样.
>运行调度程序(n),其中n是某些与实现相关的值.我们需要这样做以防止饥饿.
>将自己发布回线程池.
这也确保了事件按顺序传递而无需借助其他方法.
这不是最好的答案,因为服务功能将占用队列中的空间,即使没有工作要做也可以调用.