Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ tbb::变量范围的并行__C++_Tbb - Fatal编程技术网

C++ tbb::变量范围的并行_

C++ tbb::变量范围的并行_,c++,tbb,C++,Tbb,我正在尝试我的第一个tbb::parallel_for循环,我需要一些帮助。我似乎很好地完成了循环,但我不确定如何在全局范围内设置变量“test”。在循环期间输出,我可以看到值是正确的,但一旦我退出循环并再次输出“test”,值为0。请帮忙 int test =0; tbb::parallel_for( tbb::blocked_range<std::vector<MeshData>::iterator>(meshData.begin(), meshData.end())

我正在尝试我的第一个tbb::parallel_for循环,我需要一些帮助。我似乎很好地完成了循环,但我不确定如何在全局范围内设置变量“test”。在循环期间输出,我可以看到值是正确的,但一旦我退出循环并再次输出“test”,值为0。请帮忙

int test =0;
tbb::parallel_for(
tbb::blocked_range<std::vector<MeshData>::iterator>(meshData.begin(),
meshData.end()),
[&] (tbb::blocked_range<std::vector<MeshData>::iterator> meshData) {
for (std::vector<MeshData>::iterator it = meshData.begin(); it != meshData.end(); it++) {

    test = (*it).posX;
    cout << test << endl; // has correct value
}
});
cout << test << endl; // has incorrect value value
int测试=0;
tbb::用于(
tbb::阻塞的_范围(meshData.begin(),
meshData.end()),
[&](tbb::阻塞的数据){
对于(std::vector::iterator it=meshData.begin();it!=meshData.end();it++){
test=(*it).posX;

您是否尝试通过捕获lambda来进行
测试
,尝试在括号中添加
&test
。虽然我尝试了,但仍然没有成功,我缺少什么:(称为数据竞争)。由于C++无法使用常规类型的变量来跨线程通信,所以程序不正确。向共享变量写入需要同步,毕竟效率低下。请看<代码> TBB::RealthORIX < /COD>如果需要还原为单个值。@ Anton看起来像是一个A.公正的结论是,我的简单例子确实有效