Вперед: 3.2.7. Последовательное выполнение кода, директива CRITICAL
Назад: 3.2.5. Разделение работы, выполнение кода одной нитью
К содержанию: Оглавление


3.2.6. Выполнение кода только главной нитью, директива MASTER

Директива выделяет участок кода, который будет выполнен только главной нитью (нитью-мастером). Остальные нити пропускают данный участок и продолжают работу с оператора, расположенного за выделенным блоком.

C/C++:

#pragma omp master [ ( name ) ] new-line
structured-block

Fortran:

!$OMP MASTER [ ( name ) ]
block
!$OMP END MASTER [ ( name ) ]

Пример программы:

Программа master.c

 #include <stdio.h>
 #include <omp.h>
 int main()
{
#pragma omp parallel num_threads(4)
{
 #pragma omp master
 {
  printf("Master is %d \n", omp_get_thread_num());
 }
  printf("I am %d\n", omp_get_thread_num());
/* Функция omp_get_thread_num() позволяет определить номер вызвавшей ее нити. */
}
return 0;
}

Программа master.f

program master
   integer i, omp_get_thread_num

!$OMP PARALLEL NUM_THREADS(4)
!$OMP MASTER
   print *, 'Master is ', omp_get_thread_num()
!$OMP END MASTER
   print *, 'I am thread ', omp_get_thread_num()
C Функция omp_get_thread_num определяет номер вызвавшей
C ее нити.
!$OMP END PARALLEL
   END
 


Вперед: 3.2.7. Последовательное выполнение кода, директива CRITICAL
Назад: 3.2.5. Разделение работы, выполнение кода одной нитью
К содержанию: Оглавление