order-reproducible-2.c 560 B

12345678910111213141516171819202122232425262728
  1. #include <unistd.h>
  2. #include <stdlib.h>
  3. int
  4. main ()
  5. {
  6. int a[128];
  7. #pragma omp parallel num_threads(8)
  8. {
  9. #pragma omp barrier
  10. #pragma omp for nowait schedule (dynamic, 2) order(reproducible:concurrent)
  11. for (int i = 0; i < 128; i++)
  12. {
  13. a[i] = i;
  14. if (i == 0)
  15. usleep (20);
  16. else if (i == 17)
  17. usleep (40);
  18. }
  19. #pragma omp for nowait schedule (dynamic, 2) order(reproducible:concurrent)
  20. for (int i = 0; i < 128; i++)
  21. a[i] += i;
  22. }
  23. for (int i = 0; i < 128; i++)
  24. if (a[i] != 2 * i)
  25. abort ();
  26. return 0;
  27. }