1 /* { dg-do run } */ 2 /* { dg-set-target-env-var OMP_THREAD_LIMIT "6" } */ 3 4 #include <stdlib.h> 5 #include <unistd.h> 6 #include <omp.h> 7 8 int main()9main () 10 { 11 if (omp_get_thread_limit () != 6) 12 return 0; 13 omp_set_dynamic (0); 14 omp_set_nested (1); 15 #pragma omp parallel num_threads (3) 16 if (omp_get_num_threads () != 3) 17 abort (); 18 #pragma omp parallel num_threads (3) 19 if (omp_get_num_threads () != 3) 20 abort (); 21 #pragma omp parallel num_threads (8) 22 if (omp_get_num_threads () > 6) 23 abort (); 24 #pragma omp parallel num_threads (6) 25 if (omp_get_num_threads () != 6) 26 abort (); 27 int cnt = 0; 28 #pragma omp parallel num_threads (5) 29 #pragma omp parallel num_threads (5) 30 #pragma omp parallel num_threads (2) 31 { 32 int v; 33 #pragma omp atomic capture 34 v = ++cnt; 35 if (v > 6) 36 abort (); 37 usleep (10000); 38 #pragma omp atomic 39 --cnt; 40 } 41 return 0; 42 } 43