使用 TBB 在向量中运行函数会给出不正确的输出

Running functions in a vector using TBB gives incorrect output

本文关键字:不正确 输出 函数 TBB 向量 运行 使用      更新时间:2023-10-16

这是我的代码,它应该在屏幕上写下数字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?

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

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

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

相反,您可能希望捕获i的副本:

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

(那里的=是可选的;我包括它是为了更清楚地说明这一点)