LINUX.ORG.RU

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

 


0

1

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

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

★★★★

Последнее исправление: DarkAmateur (всего исправлений: 2)

Как мне представляется, 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 ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.