L'idée était d'effectuer des opérations sur chaque élément de la matrice en parallèle. Je viens avec ce qui suit:Modification du tableau avec std :: async
struct dataContainer
{
int value;
bool flag;
dataContainer()
: value(1)
, flag(true)
{}
};
int main()
{
std::vector<dataContainer> arrData;
arrData.resize(10);
{
std::vector<std::future<void> > results;
std::for_each(arrData.begin(), arrData.end(), [&results](dataContainer& tData) {
results.emplace_back(std::async(std::launch::async, [](dataContainer& ttData) {
ttData.value++;
ttData.flag = false;
}, tData));
});
}
return 0;
}
Cependant, lambda appelé par std :: async ne réalise pas les opérations sur les éléments de arrData. En fait, je ne comprends pas ce qui se passe. Il semble que les opérations sont effectuées sur la copie locale de dataContainer. Donc la question est ce qui se passe, et comment puis-je effectuer des opérations sur des éléments de tableau de cette manière?
La dernière occurrence de 'tData', dans' appel async' - changer à ' std :: ref (tData) '. Sinon, il est en effet capturé par la valeur. –
Oui, ça m'a aidé. Merci! –