1238384Sjkim/* Trivial test of critical sections. */ 2238384Sjkim 3238384Sjkim/* { dg-require-effective-target sync_int_long } */ 4238384Sjkim 5238384Sjkim#include <omp.h> 6238384Sjkim#include <sys/time.h> 7238384Sjkim#include <unistd.h> 8238384Sjkim#include <assert.h> 9238384Sjkim#include "libgomp_g.h" 10238384Sjkim 11238384Sjkim 12238384Sjkimstatic volatile int test = -1; 13238384Sjkim 14238384Sjkimstatic void function(void *dummy) 15238384Sjkim{ 16238384Sjkim int iam = omp_get_thread_num (); 17238384Sjkim int old; 18238384Sjkim 19238384Sjkim GOMP_critical_start (); 20238384Sjkim 21238384Sjkim old = __sync_lock_test_and_set (&test, iam); 22238384Sjkim assert (old == -1); 23238384Sjkim 24238384Sjkim usleep (10); 25238384Sjkim test = -1; 26238384Sjkim 27238384Sjkim GOMP_critical_end (); 28238384Sjkim} 29238384Sjkim 30238384Sjkimint main() 31238384Sjkim{ 32238384Sjkim omp_set_dynamic (0); 33238384Sjkim 34238384Sjkim GOMP_parallel_start (function, NULL, 3); 35246772Sjkim function (NULL); 36238384Sjkim GOMP_parallel_end (); 37238384Sjkim 38238384Sjkim return 0; 39238384Sjkim} 40238384Sjkim