1 /* Trivial test of single. */ 2 3 /* { dg-require-effective-target sync_int_long } */ 4 5 #include <omp.h> 6 #include <sys/time.h> 7 #include <unistd.h> 8 #include <assert.h> 9 #include "libgomp_g.h" 10 11 12 static int test; 13 14 static void f_nocopy (void *dummy) 15 { 16 if (GOMP_single_start ()) 17 { 18 int iam = omp_get_thread_num (); 19 int old = __sync_lock_test_and_set (&test, iam); 20 assert (old == -1); 21 } 22 } 23 24 static void f_copy (void *dummy) 25 { 26 int *x = GOMP_single_copy_start (); 27 if (x == NULL) 28 { 29 int iam = omp_get_thread_num (); 30 int old = __sync_lock_test_and_set (&test, iam); 31 assert (old == -1); 32 GOMP_single_copy_end (&test); 33 } 34 else 35 assert (x == &test); 36 } 37 38 int main() 39 { 40 omp_set_dynamic (0); 41 42 test = -1; 43 GOMP_parallel_start (f_nocopy, NULL, 3); 44 f_nocopy (NULL); 45 GOMP_parallel_end (); 46 47 test = -1; 48 GOMP_parallel_start (f_copy, NULL, 3); 49 f_copy (NULL); 50 GOMP_parallel_end (); 51 52 return 0; 53 } 54