C 有没有办法将向量行中的不同任务分配给线程?(二维矢量)

C 有没有办法将向量行中的不同任务分配给线程?(二维矢量),c,C,我有一个依赖的2D向量。要使第一行完成其在二维向量中的任务,它取决于第二行完成其任务。第二行依赖于第三行在开始之前完成其任务。沃德的情况仍在继续。该算法的目标是使用线程并将行中的每个值(任务)分配给线程。因此,线程可以从底部开始一次完成一行 更深入地说,任务全部依赖于任务a和任务b在继续之前完成。任务a正在等待任务(a1、a2、a3、a4、d)先完成,然后才能完成。 任务b正在等待任务(b1、b2、b3、e、a4)完成,然后才能完成其他任务。任务a和任务b位于同一行。任务(a1、a2、a3、a4

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

更深入地说,任务全部依赖于任务a和任务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)也在同一行上。我想为每个任务分配一个线程。我在这里有点新,所以如果有什么我可以做的,以帮助澄清,我会很高兴这样做。如果前一行中的所有元素都由一个线程处理并且该任务的依赖关系已经完成,那么如果有一种方法可以将一个线程分配到下一行,我将不胜感激

线程的数量无关紧要,因此我们可以假设线程数是可变的


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

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

我认为,从一次处理一行依赖关系树的角度来看,将其可视化不是很有用,至少在事实上有多个线程并行执行任务的情况下是这样。完全可以想象,可以同时在树的多个级别上运行任务,而人工保留这些任务似乎没有什么好处


我没有编写任何示例代码或描述任何细节,因为这个问题太高,无法承受。确实有一些棘手的细节需要整理,但如果您在其中一些方面遇到问题,那么这将是一个或多个不同的、更具体的问题的主题。

我理解依赖关系图的概念,但我不理解您将其归因于“行”的意义您所描述的特定表示的。我也不理解你对你心目中的软件架构的描述。不过,有一件事可能会有所帮助,那就是要认识到你是在逆向思考:你不给任务分配线程;更确切地说,是将任务分配给线程。@JohnBollinger嘿,John解释得稍微好一点,我的意思是,我有一个我想执行的任务,叫做taskall。但要完成名为all的任务,我必须先完成任务a和任务b。为了完成任务a,我必须完成任务a1,a2。。。对于b,我必须完成任务b1,b2。每个任务都有一个箭头指向必须完成才能执行的任务。行正好是每个任务的深度。我将相同深度的任务放在同一行中,因为例如,如果第5行的所有任务都要完成,则可以继续执行第4s行任务。etcOne首先通过选择线程的启动函数来定义线程的工作。也许这就是你真正想知道的。如果你想要的不止这些,那么我恐怕你需要澄清到底是什么。@JohnBollinger,这就是我要问的,我想知道如何给每个线程一个与第5行不同的任务。完成这些任务后,给每个线程一个与第4行不同的任务。我使用的行的结构是2D vector。换句话说,元素是第二个向量的向量。如果可能,允许使用我认为必须使用的for循环,在前一行中的所有任务都由另一个线程完成或已完成的情况下,将任务分配给一个线程。因此,您是否考虑到线程将少于(或至少可以少于)个任务?程序是否有权访问任务和依赖项的表示?似乎这对于程序动态地进行适当的任务分配是必要的。