LINUX.ORG.RU

[OpenMP] Многопоточные приложения

 


0

1

Допустим, мне нужно, чтобы вместе с приложением запускался отдельный поток, который, например, будет проверять состояния. Т.е. это будет вечнозацикленный поток (а самое главное, независымый от всех остальных потоков), общающийся через общие переменные. Как это реализовать с помощью OpenMP?

Насколько разумно устраивать месиво из обычных тредов и OpenMP. Или лучше выбрать что-нить одно и его выжимать?

Как мне представляется, OpenMP создавался скорее для удобства распараллеливания последовательного кода.

Использовать его для создания многопоточных приложений со специфической архитектурой вряд ли проще, чем использовать напрямую pthreads, например.

oami ★★
()

Как это реализовать с помощью OpenMP?

#pragma omp parallel sections
{
    #pragma omp section
    {
        while (1) {
        // Тот самый вечнозацикленный поток
        }
    }

    #pragma omp section
    main_program();
}

Как-то так.

Насколько разумно устраивать месиво из обычных тредов и OpenMP

Зависит от реализации потоков в программе и OpenMP. Например, в libgomp используются pthreads, если основная программа будет использовать какую-нибудь pth в режиме совместимости с pthreads, можно огрести плавающие ошибки.

Если же реализации моделей потоков совместимы, то все упирается в средства синхронизации между потоками.

sjinks ★★★
()
Ответ на: комментарий от sjinks

Да, еще нужно убедиться, что количество потоков будет не меньше двух (например, на однопроцессорной системе) — иначе дальше while (1) дело не сдвинется.

sjinks ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.