lock-2.c 636 B

1234567891011121314151617181920212223242526272829303132
  1. #include <omp.h>
  2. #include <stdlib.h>
  3. int
  4. main (void)
  5. {
  6. int l = 0;
  7. omp_nest_lock_t lock;
  8. omp_init_nest_lock (&lock);
  9. #pragma omp parallel reduction (+:l) num_threads (1)
  10. {
  11. if (omp_test_nest_lock (&lock) != 1)
  12. l++;
  13. if (omp_test_nest_lock (&lock) != 2)
  14. l++;
  15. #pragma omp task if (0) shared (lock, l)
  16. {
  17. if (omp_test_nest_lock (&lock) != 0)
  18. l++;
  19. }
  20. #pragma omp taskwait
  21. if (omp_test_nest_lock (&lock) != 3)
  22. l++;
  23. omp_unset_nest_lock (&lock);
  24. omp_unset_nest_lock (&lock);
  25. omp_unset_nest_lock (&lock);
  26. }
  27. if (l)
  28. abort ();
  29. omp_destroy_nest_lock (&lock);
  30. return 0;
  31. }