在C ++中,分而治之间的区别是什么?分叉加入?是fork并加入一个特殊的分而治之的例子,因为fork和join只适用于并行性?谢谢!
答案 0 :(得分:2)
“Fork”和“Join”命名特定的并行原语,可用于多种语言。 “Fork”导致另一个执行线程被启动; “join”导致当前线程等待另一个线程完成并同步。我相信C ++ 14标准内置了这样的原语。许多其他langauges没有这种内置功能,但它通常可以通过库(包括早期版本的C ++)获得。
有人可能会使用“Fork”和“Join”来实现并行性增强的“分而治之”。像这样使用,“fork”将线程发送到单独的子项,并且“join”是表示子问题完成信号的步骤。但“加入”并不专门计算“大”问题的综合答案。您可能需要更多代码,而不仅仅是fork和join。
答案 1 :(得分:1)
基本上,Fork-Join将手头的任务分解为迷你任务,直到迷你任务足够简单,无需进一步分解即可解决。这就像一个分而治之的算法。在此框架中需要注意的一个重要概念是理想情况下没有工作线程处于空闲状态。他们实施了一种窃取工作的算法,因为闲置的工作人员从那些忙碌的工人那里偷走了工作。
Result solve(Problem problem)
{
if (problem is small)
directly solve problem
else
{
split problem into independent parts
fork new subtasks to solve each part
join all subtasks
compose result from subresults
}
}
C ++ 14有一些与fork& amp相关的问题。加入,您可以从此网站(http://www.meetingcpp.com/index.php/br/items/a-look-at-c14-papers-part-2.html)
了解更多信息