gpt4 book ai didi

C++ PPL - lambda 表达式和数据共享

转载 作者:行者123 更新时间:2023-11-28 03:37:36 25 4
gpt4 key购买 nike

我的 PPL 程序崩溃了。我确实怀疑某些变量处理不当。如果我的 parallel_for 构造语法是

parallel_for(0,p,[&x1Pt,&x2Pt,&confciInput,&formula,&param,&method,&lowOneParam,&highOneParam](int i)
{

// ...

}

,是否每个线程都有自己的 confciInput 和公式拷贝,例如,要使用?还是 lambda 表达式的捕获子句只提供对封闭作用域局部变量的访问?

感谢和问候。

最佳答案

当您在 lambda 表达式的捕获列表中通过引用捕获变量时,每个线程将对捕获的同一个变量进行操作,并且该变量的值在调用者的上下文中被修改。如果您需要每个线程都有自己的拷贝,请将调用修改为

parallel_for(0,p,
[&x1Pt,&x2Pt,confciInput,formula,&param,&method,&lowOneParam,&highOneParam]
(int i) mutable
{
// ...
} );

现在,每个线程都有自己的 confciInputformula 变量拷贝,但是这些线程可能对这些本地拷贝所做的任何修改都不会对原始变量。

此外,默认情况下,lambda 通过 const 值捕获变量,因此如果您要修改 lamda 中的任一变量,则需要 mutable 规范。

关于C++ PPL - lambda 表达式和数据共享,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10385640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com