45 lines · c
1// RUN: %libomp-compile-and-run2#include <stdio.h>3#include "omp_testsuite.h"4 5int test_omp_master_3()6{7 int nthreads;8 int executing_thread;9 int tid_result = 0; /* counts up the number of wrong thread no. for10 the master thread. (Must be 0) */11 nthreads = 0;12 executing_thread = -1;13 14 #pragma omp parallel15 {16 #pragma omp master17 {18 int tid = omp_get_thread_num();19 if (tid != 0) {20 #pragma omp critical21 { tid_result++; }22 }23 #pragma omp critical24 {25 nthreads++;26 }27 executing_thread = omp_get_thread_num ();28 } /* end of master*/29 } /* end of parallel*/30 return ((nthreads == 1) && (executing_thread == 0) && (tid_result == 0));31}32 33int main()34{35 int i;36 int num_failed=0;37 38 for(i = 0; i < REPETITIONS; i++) {39 if(!test_omp_master_3()) {40 num_failed++;41 }42 }43 return num_failed;44}45