#include <stdio.h> #ifdef _OPENMP #include <omp.h> #endif void print_omp_info(const char text[]) { #pragma omp critical printf("%i/%i%s\n", omp_get_thread_num(), omp_get_num_threads(), text); } int main(int argc, char *argv[]) { #ifdef _OPENMP #pragma omp parallel { print_omp_info(" in parallel region"); /* Implicite barrier after single region */ #pragma omp single print_omp_info( " in parallel region with single"); /* No implicite barrier for master region */ #pragma omp master print_omp_info( " in parallel region with master"); print_omp_info(" in parallel region"); #pragma omp barrier #pragma omp single print_omp_info( " in parallel region with single after barrier"); } /* 0/4 in parallel region 3/4 in parallel region 0/4 in parallel region with single 1/4 in parallel region 2/4 in parallel region 1/4 in parallel region 0/4 in parallel region with master 0/4 in parallel region 3/4 in parallel region 2/4 in parallel region 1/4 in parallel region with single after barrier */ #else printf("No OpenMP support\n"); #endif return 0; }