thread-limit-1.c 951 B

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