boost 里面有状态机了_c – 如何使用boost :: statechart在固定数量的线程上复用许多异步状态机?...

假设我有许多使用boost :: statechart定义的异步状态机.用于运行多个异步状态机的明确记录的机制是将一个或多个异步状态机固定到线程.但是,出于我的目的,我需要运行许多很多异步状态机,每个线程一个不会.此外,任何给定状态机完成的工作量是不可预测的,因此将状态机分配给固定线程将导致不平衡.

相反,我想要一个线程池,其中空闲线程可以从队列中获取一些工作量.需要注意这一点,以便按顺序传递给定状态机的事件.据推测,开始的地方将涉及实现调度程序和可能的FifoWorker概念,以分别执行我想要的替代fifo_scheduler和fifo_worker类的操作.但是,我想知道这个问题是否已经被其他人解决了,或者我是否只是提出了错误的问题.

最佳答案 回答我自己的问题,现在我有时间考虑一下.这很简单:

>每个状态机都有自己的fifo_scheduler

>当我们希望状态机开始运行时,会向线程池发布一个函数:

>检查scheduler.terminated()并停止,如果是这样.

>运行调度程序(n),其中n是某些与实现相关的值.我们需要这样做以防止饥饿.

>将自己发布回线程池.

这也确保了事件按顺序传递而无需借助其他方法.

这不是最好的答案,因为服务功能将占用队列中的空间,即使没有工作要做也可以调用.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值