Код критической секции выполняется только один раз в параллельном OMP дляC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Код критической секции выполняется только один раз в параллельном OMP для

Сообщение Anonymous »

У меня есть функция, которая выполняет некоторую логику (которую я не показал в коде, и это не имеет значения для этого контекста) внутри параллельной функции и записывает ее в файл. Код записи файла защищен 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»