这个问题与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)。
提前感谢您的帮助。
答案 0 :(得分:3)
这不是你问题的直接答案,因为据说它对我来说没什么意义。所以,请注意一些原因。
tbb::task
是一个低级别界面,除非您知道自己在做什么,否则通常不建议使用它。例如,spawn_and_wait_for_all(task_list)
对于长列表(&gt; 10)效率低下。可以使用tbb::parallel_reduce
实现递归并行,例如除法和收集,尤其是向量的工作,或者如果您只想使用任务,请查看tbb::task_group
或tbb::parallel_invoke
。
另请注意,std:vector
不允许同时从不同的任务执行安全的并发push_back()
,它不是线程安全的。相反,您可以尝试tbb::concurrent_vector<>
,但我建议您首先尝试tbb::parallel_reduce
或tbb::combinable
。