firstprivate
работает путем создания частного копии значения. Это не работает с потоками, потому что вы не можете скопировать их. Вы не можете безопасно записать в файл, просто открыв несколько его потоков. Есть в основном два варианта:
Иметь общий поток , защитить весь многопоточный доступ к нему с помощью #pragma omp critical
.
ofstream myfile("file_path");
#pragma omp parallel for
for (int i=0; i < 10000; i++) {
#pragma omp critical
myfile << (omp_get_thread_num()+100) << endl;
}
Открыть один поток для каждого потока в другом файле .
#pragma omp parallel
{
ofstream myfile(std::string("file_path.") + std::to_string(omp_get_thread_num()));
#pragma omp for
for (int i=0; i < 10000; i++) {
myfile << (omp_get_thread_num()+100) << endl;
}
}