Рассмотрим приведенный ниже код:
Код: Выделить всё
#include
#include
int main(){
#pragma omp parallel num_threads(4)
{
int tid;
#pragma omp single private(tid)
{
tid = omp_get_thread_num();
printf("[A from thread %d] ", tid);
#pragma omp task private(tid)
{
tid = omp_get_thread_num();
printf("[race from thread %d] ", tid);
}
#pragma omp task private(tid)
{
tid = omp_get_thread_num();
printf("[car from thread %d] ",tid);
}
}
}
return 0;
}
Последовательная версия этой программы должна просто печатать гоночную машину, но поскольку я хочу знать, какой поток из пула печатает какое слово, я заключаю квадратные скобки каждое слово с номером темы.

Мой вопрос: я объявляю переменную int tid в начале программы. Я хочу быть уверенным, что каждый поток, выполняющий задачу, имеет свою собственную копию tid, чтобы эти копии не подвергались условиям гонки.
Итак, чтобы сделать это , я разместил повторяющееся предложение Private(tid) в нескольких местах. Есть ли способ уменьшить повторение кода?
Подробнее здесь: https://stackoverflow.com/questions/790 ... enmp-tasks