繁体   English   中英

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

[英]Running functions in a vector using TBB gives incorrect output

这是我的代码,它应该在屏幕上写出数字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'; });

(那里的=是可选的;我把它包括在内以使点更清晰)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM