Se você paralelizou seu código com openMP, logo perceberá que usar std :: cout
não funcionará, pois as strings de outras threads podem ser geradas ao mesmo tempo.
Uma solução é usar um mutex antes da saída, mas isso não é muito elegante.
Uma solução alternativa é armazenar a string que você deseja imprimir em um buffer.
class ParallelStream{
std::ostringstream stdStream;
public:
ParallelStream(){}
template <class T>
ParallelStream& operator<<(const T& inData){
stdStream << inData;
return *this;
}
std::string toString() const{
return stdStream.str();
}
};
#pragma omp parallel for
for (int n_radial = 0; n_radial < Nradial; n_radial++) {
// Note: The string is first collected into the ParallelStream object and then moved into the output.
cout << (ParallelStream() << n_radial << " (" << Nradial << ")").toString() << endl;
}