testsuite/libgomp.c/lock-3.c

Go to the documentation of this file.
00001 /* { dg-do run { target *-*-linux* } } */
00002 
00003 #ifndef _GNU_SOURCE
00004 #define _GNU_SOURCE 1
00005 #endif
00006 #include <pthread.h>
00007 #include <omp.h>
00008 #include <stdio.h>
00009 #include <stdlib.h>
00010 
00011 pthread_barrier_t bar;
00012 omp_nest_lock_t lock;
00013 
00014 void *tf (void *p)
00015 {
00016   int l;
00017   if (p)
00018     {
00019       if (omp_test_nest_lock (&lock) != 1)
00020     abort ();
00021       if (omp_test_nest_lock (&lock) != 2)
00022     abort ();
00023     }
00024   pthread_barrier_wait (&bar);
00025   if (!p && omp_test_nest_lock (&lock) != 0)
00026     abort ();
00027   pthread_barrier_wait (&bar);
00028   if (p)
00029     {
00030       if (omp_test_nest_lock (&lock) != 3)
00031     abort ();
00032       omp_unset_nest_lock (&lock);
00033       omp_unset_nest_lock (&lock);
00034       omp_unset_nest_lock (&lock);
00035     }
00036   pthread_barrier_wait (&bar);
00037   if (!p)
00038     {
00039       if (omp_test_nest_lock (&lock) != 1)
00040     abort ();
00041       if (omp_test_nest_lock (&lock) != 2)
00042     abort ();
00043       omp_unset_nest_lock (&lock);
00044       omp_unset_nest_lock (&lock);
00045     }
00046   return NULL;
00047 }
00048 
00049 int
00050 main (void)
00051 {
00052   pthread_t th;
00053   omp_init_nest_lock (&lock);
00054   pthread_barrier_init (&bar, NULL, 2);
00055   pthread_create (&th, NULL, tf, NULL);
00056   tf ("");
00057   pthread_join (th, NULL);
00058   omp_destroy_nest_lock (&lock);
00059   return 0;
00060 }

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