c – 如何使用boost :: statechart在固定数量的线程上复用许多异步状态机?

c – 如何使用boost :: statechart在固定数量的线程上复用许多异步状态机?,第1张

概述假设我有许多使用boost :: statechart定义的异步状态机.用于运行多个异步状态机的明确记录的机制是将一个或多个异步状态机固定线程.但是,出于我的目的,我需要运行许多很多异步状态机,每个线程一个不会.此外,任何给定状态机完成的工作量是不可预测的,因此将状态机分配给固定线程将导致不平衡. 相反,我想要一个线程池,其中空闲线程可以从队列中获取一些工作量.需要注意这一点,以便按顺序传递给定 假设我有许多使用boost :: statechart定义的异步状态机.用于运行多个异步状态机的明确记录的机制是将一个或多个异步状态机固定到线程.但是,出于我的目的,我需要运行许多很多异步状态机,每个线程一个不会.此外,任何给定状态机完成的工作量是不可预测的,因此将状态机分配给固定线程将导致不平衡.

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

解决方法 回答我自己的问题,现在我有时间考虑一下.这很简单:

>每个状态机都有自己的fifo_scheduler
>当我们希望状态机开始运行时,会向线程池发布一个函数:

>检查scheduler.terminated()并停止,如果是这样.
>运行调度程序(n),其中n是某些与实现相关的值.我们需要这样做以防止饥饿.
>将自己发布回线程池.

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

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

总结

以上是内存溢出为你收集整理的c – 如何使用boost :: statechart在固定数量的线程上复用许多异步状态机?全部内容,希望文章能够帮你解决c – 如何使用boost :: statechart在固定数量的线程上复用许多异步状态机?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1227856.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存