TBB /线程构建块:从任务获取返回值

时间:2016-01-02 15:58:11

标签: multithreading task block tbb building

这个问题与How to get return value from a function called which executes in another thread in TBB?类似,但我正在处理任务。

我有以下代码:

vector<vector<int> > all;
for(h=0; h<100;h++){
    vector<int> vector1= Node(anotherVector[h], value - 1, anotherVector[h].size()); 
    for (unsigned int u = 0; u < vector1.size(); u++) {
        all[h].push_back(vector1[u]);
    }
}

&#34;向量1&#34;保存Node的递归调用结果。 我希望TBB将Node称为并行。然后使用&#34; vector1&#34;把它推到'#34;所有&#34;。 我的问题是,如果我尝试使用任务,我需要从Node返回一个Task对象,以便使用spawn_and_wait_for_all(这里是taskobjectlist)。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

这不是你问题的直接答案,因为据说它对我来说没什么意义。所以,请注意一些原因。

tbb::task是一个低级别界面,除非您知道自己在做什么,否则通常不建议使用它。例如,spawn_and_wait_for_all(task_list)对于长列表(&gt; 10)效率低下。可以使用tbb::parallel_reduce实现递归并行,例如除法和收集,尤其是向量的工作,或者如果您只想使用任务,请查看tbb::task_grouptbb::parallel_invoke。 另请注意,std:vector不允许同时从不同的任务执行安全的并发push_back(),它不是线程安全的。相反,您可以尝试tbb::concurrent_vector<>,但我建议您首先尝试tbb::parallel_reducetbb::combinable