使用 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'; });
(那里的=
是可选的;我包括它是为了更清楚地说明这一点)
相关文章:
- 不正确的比较和交换计数器输出用于快速排序功能
- Windows 10命令提示符的输出不正确
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- C++ - 为什么 unicode 输出不正确?
- 连接的组件程序产生不正确的输出
- 我的动态链接队列在同一输出流中调用时不正确地输出三个返回函数
- 我的叉子输出不正确
- 输出使用 cout 转换为 ASCII 的文本时输出格式不正确,C++
- 堆排序,我无法弄清楚我的代码出了什么问题,输出顺序不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 不正确的输出和变量未用Eclipse CDT初始化构造函数
- 当行数和列不匹配时,输出不正确
- 合并排序不正确的输出 c++
- 从堆栈中读取字符后,如何修复不正确的文件输出
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 测试整数是否在范围内时,逻辑错误和不正确输出