task-4.C 615 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include <omp.h>
  2. extern "C" void *memset (void *, int, __SIZE_TYPE__);
  3. extern "C" void abort (void);
  4. int e;
  5. void
  6. baz (int i, int *p, int j, int *q)
  7. {
  8. if (p[0] != 1 || p[i] != 3 || q[0] != 2 || q[j] != 4)
  9. #pragma omp atomic
  10. e++;
  11. }
  12. void
  13. foo (int i, int j)
  14. {
  15. int p[i + 1];
  16. int q[j + 1];
  17. memset (p, 0, sizeof (p));
  18. memset (q, 0, sizeof (q));
  19. p[0] = 1;
  20. p[i] = 3;
  21. q[0] = 2;
  22. q[j] = 4;
  23. #pragma omp task firstprivate (p, q)
  24. baz (i, p, j, q);
  25. }
  26. int
  27. main ()
  28. {
  29. #pragma omp parallel num_threads (4)
  30. foo (5 + omp_get_thread_num (), 7 + omp_get_thread_num ());
  31. if (e)
  32. abort ();
  33. }