首页 > 解决方案 > 有没有办法将向量行中的不同任务分配给线程?(二维矢量)

问题描述

我有一个二维的依赖向量。第一行在 2D 向量中完成其任务取决于第二行完成其任务。第二行依赖于第三行在开始之前完成其任务。这继续病房。该算法的目标是使用线程并将行中的每个值(任务)分配给一个线程。因此,线程可以从底部开始一次完成一排。

更深入一点,task all 依赖于 task a 和 task b 在它可以继续之前完成。任务 a 正在等待任务 (a1,a2,a3,a4,d) 先完成,然后才能完成。任务 b 正在等待任务 (b1,b2,b3,e,a4) 完成,然后才能完成等。任务 a 和任务 b 在同一行。任务 (a1,a2,a3,a4,d) 和任务 (b1,b2,b3,e,a4) 也位于同一行。我想为每个任务分配一个线程。我在这里有点新,所以如果有什么我可以做的来帮助澄清,我很乐意这样做。如果前一行中的所有元素都由一个线程处理并且该任务的依赖关系已经完成,那么如果有一种方法可以将线程分配给下一行,我也将不胜感激。

线程的数量无关紧要,因此我们可以假设有一个变量 thread_count。

依赖列表图像

标签: c

解决方案


您已将工作划分为一组您称为“任务”的单元。您希望安排这些以多线程方式执行,明确考虑任务之间定义的一组依赖关系。此外,您希望安排线程执行多个单独的任务。

其中一些特性迫切需要线程池。这将为将许多任务分配给更少的线程提供通用框架。但是您的任务之间的依赖关系要求您拥有比简单的 FIFO 方法更智能的调度算法。基本上,您的调度功能必须始终选择一个其依赖项(如果有)都已完成的任务。这可能意味着某些可用线程在某些时间甚至所有时间都处于空闲状态。

我认为在一次处理一行依赖关系树方面将其可视化并不是很有用,至少如果实际上有多个线程并行执行任务则不会。完全可以想象,在树的多个级别上同时存在准备运行的任务,并且人为地保留它们似乎没有优势。

我没有编写任何示例代码或描述任何细节,因为这个问题太高级了,无法承受。肯定有一些棘手的细节需要整理,但如果你对其中的一些有疑问,那么这将是一个或多个不同、更具体的问题的主题。


推荐阅读