У меня есть функция, которая выполняет некоторую логику (которую я не показал в коде, и это не имеет значения для этого контекста) внутри параллельной функции и записывает ее в файл. Код записи файла защищен OMP Critical. Но я вижу, что оно выполняется только один раз. Чего мне не хватает?
Код: Выделить всё
#pragma omp parallel for num_threads(8)
for (int elementCtr = 0; elementCtr < 100; ++elementCtr)
{
#pragma omp critical
{
FILE* fp = fopen("D:\\chk.txt", "w");
fprintf(fp, "Thread = %d\n", omp_get_thread_num());
fprintf(fp, "Hello1\n");
fprintf(fp, "Hello2\n");
fprintf(fp, "Hello3\n");
fprintf(fp, "Hello4\n");
fprintf(fp, "-----------------------\n");
fclose(fp);
}
}
Я вижу только один раз (один поток), который был выполнен. Я думаю, что критический раздел предоставляет эксклюзивный доступ к каждому потоку, и каждый поток будет выполнять код, защищенный критическим разделом. . Но почему он выполняется только один раз.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... rallel-for