2012-04-30 29 views
0

我的程序與PPL崩潰。我懷疑一些處理不當的變量。如果我對parallel_for時構建語法C++ PPL - lambda表達式和數據共享

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

       // ... 

     } 

,做到每個線程有自己的confciInput和公式的副本,例如,一起工作?或者,lambda表達式的capture子句僅提供對封閉的作用域局部變量的訪問?

感謝和問候。

回答

2

當您在lambda表達式的捕獲列表中通過引用捕獲變量時,每個線程將對捕獲的相同變量進行操作,並且此變量的值在調用者的上下文中被修改。如果你需要每個線程有它自己的拷貝修改調用

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

現在,每個線程都有自己的confciInputformula變量的副本,但任何修改,這些線程可能使這些本地副本不會被製作成原始變量。

另外,默認情況下,lambda會根據const值捕獲變量,因此如果您要修改lamda中的任一變量,則需要mutable規範。

+0

謝謝,但不是編譯。語法'= confciInput'中的錯誤,在capture子句中'= formula'。 – octoback

+0

@dlib哎呀,搞砸了語法,你不需要'=',只需要通過值 – Praetorian

+0

捕獲的變量名以及如果confciInput是一個指向類對象的指針呢?有沒有辦法? – octoback