Потоки OpenMP, как правильно использовать предложения omp atomic? - PullRequest
1 голос
/ 08 марта 2019

Я пытаюсь распараллелить программу, которая последовательно читает пары строк из файла.Я хочу использовать omp atomic, чтобы убедиться, что в каждом цикле пара будет читаться правильно.Я собираюсь использовать это в своем коде так:

#pragma omp atomic 
{
if(a = getmystring(fp)) fprintf(fpw, "A: %s\n", a);
if(b = getmystring(fp)) fprintf(fpw, "B: %s\n", b);
}

Моя проблема в том, что я не знаю, в чем разница между предложениями (чтение, запись, обновление, захват) для использованияправильный.getmystring (fp) - это функция, которая читает по одной строке за раз из файла.

1 Ответ

1 голос
/ 08 марта 2019

Похоже, вы выбрали неправильную конструкцию OpenMP. Похоже, цель состоит в том, чтобы одновременно выполнять только один поток в вашем блоке. Это означает, что блок предназначен для критической области , а директива, используемая для объявления его, - omp critical:

#pragma omp critical 
{
    if(a = getmystring(fp)) fprintf(fpw, "A: %s\n", a);
    if(b = getmystring(fp)) fprintf(fpw, "B: %s\n", b);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...