使用TBB在向量中运行函数会产生错误的输出

时间:2019-01-21 18:32:38

标签: c++ function parallel-processing tbb

这是我的代码,应该在屏幕上以随机顺序写入数字0到19。

vector<std::function<void(void)>> tasks;
for(int i=0; i<20;i++)
     { 
        tasks.push_back( [&](){cout<< i<<endl;} );  
     }

tbb::parallel_for(size_t(0), size_t(tasks.size()), [&](int K) {(tasks[K])();});

出局是:

20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20
20

我在做什么错?如何写出0到19之间的数字?

1 个答案:

答案 0 :(得分:3)

您在添加新任务时向i传递了引用

   tasks.push_back( [&](){cout<< i<<endl;} );  
   //               ^^^ here

运行任务时,i已达到20,因此每个线程将打印此内容。

相反,您可能想要捕获i副本

    tasks.push_back([=i]{ std::cout << i << '\n'; });

=是可选的;为了清楚起见,我将其包括在内)