testsuite/libgomp.c++/ctor-1.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 icount;
00009   static int dcount;
00010   static int xcount;
00011 
00012   B();
00013   B(const B &);
00014   ~B();
00015   B& operator=(const B &);
00016   void doit();
00017 };
00018 
00019 int B::icount;
00020 int B::dcount;
00021 int B::xcount;
00022 
00023 B::B()
00024 {
00025   #pragma omp atomic 
00026     icount++;
00027 }
00028 
00029 B::~B()
00030 {
00031   #pragma omp atomic
00032     dcount++;
00033 }
00034 
00035 void B::doit()
00036 {
00037   #pragma omp atomic
00038     xcount++;
00039 }
00040 
00041 static int nthreads;
00042 
00043 void foo()
00044 {
00045   B b;
00046   #pragma omp parallel private(b)
00047     {
00048       #pragma omp master
00049     nthreads = omp_get_num_threads ();
00050       b.doit();
00051     }
00052 }
00053 
00054 int main()
00055 {
00056   omp_set_dynamic (0);
00057   omp_set_num_threads (4);
00058   foo();
00059 
00060   assert (B::xcount == nthreads);
00061   assert (B::icount == nthreads+1);
00062   assert (B::dcount == nthreads+1);
00063 
00064   return 0;
00065 }

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