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

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

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