testsuite/libgomp.c++/task-2.C

Go to the documentation of this file.
00001 // { dg-do run }
00002 
00003 #include <omp.h>
00004 extern "C" void abort ();
00005 
00006 int l = 5;
00007 
00008 int
00009 foo (int i)
00010 {
00011   int j = 7;
00012   const int k = 8;
00013   #pragma omp task firstprivate (i) shared (j, l)
00014   {
00015     #pragma omp critical
00016       {
00017     j += i;
00018     l += k;
00019       }
00020   }
00021   i++;
00022   #pragma omp task firstprivate (i) shared (j, l)
00023   {
00024     #pragma omp critical
00025       {
00026     j += i;
00027     l += k;
00028       }
00029   }
00030   i++;
00031   #pragma omp task firstprivate (i) shared (j, l)
00032   {
00033     #pragma omp critical
00034       {
00035     j += i;
00036     l += k;
00037       }
00038   }
00039   i++;
00040   #pragma omp task firstprivate (i) shared (j, l)
00041   {
00042     #pragma omp critical
00043       {
00044     j += i;
00045     l += k;
00046       }
00047   }
00048   i++;
00049   #pragma omp taskwait
00050   return (i != 8 * omp_get_thread_num () + 4
00051       || j != 4 * i - 3
00052       || k != 8);
00053 }
00054 
00055 int
00056 main (void)
00057 {
00058   int r = 0;
00059   #pragma omp parallel num_threads (4) reduction(+:r)
00060     if (omp_get_num_threads () != 4)
00061       {
00062     #pragma omp master
00063       l = 133;
00064       }
00065     else if (foo (8 * omp_get_thread_num ()))
00066       r++;
00067   if (r || l != 133)
00068     abort ();
00069   return 0;
00070 }

Generated on Fri Apr 5 05:38:10 2013 for Libgomp by  doxygen 1.4.7