testsuite/libgomp.c++/ctor-7.C

Go to the documentation of this file.
00001 // { dg-do run }
00002 
00003 #include <omp.h>
00004 #include <assert.h>
00005 
00006 #define N 10
00007 
00008 struct B
00009 {
00010   static int icount;
00011   static int dcount;
00012   static int xcount;
00013 
00014   B();
00015   B(const B &);
00016   ~B();
00017   B& operator=(const B &);
00018   void doit();
00019 };
00020 
00021 int B::icount;
00022 int B::dcount;
00023 int B::xcount;
00024 
00025 B::B()
00026 {
00027   #pragma omp atomic 
00028     icount++;
00029 }
00030 
00031 B::~B()
00032 {
00033   #pragma omp atomic
00034     dcount++;
00035 }
00036 
00037 void B::doit()
00038 {
00039   #pragma omp atomic
00040     xcount++;
00041 }
00042 
00043 static int nthreads;
00044 
00045 void foo()
00046 {
00047   B b[N];
00048   #pragma omp parallel private(b)
00049     {
00050       #pragma omp master
00051     nthreads = omp_get_num_threads ();
00052       b[0].doit();
00053     }
00054 }
00055 
00056 int main()
00057 {
00058   omp_set_dynamic (0);
00059   omp_set_num_threads (4);
00060   foo();
00061 
00062   assert (B::xcount == nthreads);
00063   assert (B::icount == (nthreads+1)*N);
00064   assert (B::dcount == (nthreads+1)*N);
00065 
00066   return 0;
00067 }

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