首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在固定数量的线程上使用boost::statechart复用多台异步状态机?

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

Stack Overflow用户
提问于 2015-10-08 23:22:51
回答 1查看 274关注 0票数 4

假设我有许多异步状态机定义了boost::statechart。运行多个异步状态机的明确记录的机制是将其中一个或多个异步状态机修复到一个线程上。但是,就我的目的而言,我需要运行许多很多异步状态机,而每个线程运行一个线程是不行的。而且,任何给定状态机所做的工作量是不可预测的,因此将状态机分配给固定线程将导致不平衡。

相反,我希望有一个线程池,其中空闲的线程可以从队列中提取一定数量的工作。这里需要注意一些事情,以便按顺序将事件传递到给定的状态机。可能的起点是实现Scheduler和FifoWorker概念,以便分别作为fifo_scheduler类和fifo_worker类的替代。然而,我不知道这个问题是否已经被别人解决了,或者我只是问错了问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-09 17:49:39

回答我自己的问题,现在我有时间考虑了。这很简单:

  • 每个状态机都有自己的fifo_scheduler。
  • 当我们希望状态机开始运行时,将一个函数提交到线程池:
    1. 检查scheduler.terminated()并在检查时停止。
    2. 运行调度程序(N),其中n是一些与实现相关的值。我们需要它来防止饥饿。
    3. 将自身回发到线程池。

这也确保了事件的顺利进行而不诉诸其他手段。

这不是最好的答案,因为服务函数将占据队列中的一个空间,即使没有工作可做,也会被调用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33027535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档