Sono Computing float
s molteplici fili e memorizzare i risultati in intervalli non sovrapposti dello stesso vector<float>
come segue:Sta chiamando safe std :: copy da più thread per diversi intervalli dello stesso vettore?
Prima di eseguire qualsiasi fili I preassegnati utilizzando vector::reserve
.
In ogni filetto una vector
di risultati specifici filo viene calcolato e poi copiato nel contenitore bersaglio simili:
vector<float>::iterator destination = globalVector.begin() + threadSpecificIndex;
std::copy(localVector.begin(), localVector.end(), destination);
È una pratica sicura?
'std :: vector :: reserve' non funzionerà, è necessario in realtà' ridimensionare() '- altrimenti si scriverà oltre l'effettivo' end() 'del vettore. – mindriot
Per aggiungere al commento @mindriot: Se il tipo che stai memorizzando non ha un costruttore predefinito puoi usare qualcosa come "boost :: optional' invece del tuo tipo direttamente. Ciò avrebbe aggiunto il vantaggio che si può dire se qualcosa è fallito senza dover creare uno di quegli oggetti "non ancora reali" che non si costruiscono completamente da soli. Quelli sono abomini. –