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