1 // RUN: %libomp-compile-and-run 2 // RUN: env KMP_LOCK_KIND=tas KMP_SPIN_BACKOFF_PARAMS=2048,200 %libomp-run 3 // RUN: env KMP_LOCK_KIND=futex %libomp-run 4 #include <stdio.h> 5 #include "omp_testsuite.h" 6 7 omp_lock_t lck; 8 test_omp_lock()9int test_omp_lock() 10 { 11 int nr_threads_in_single = 0; 12 int result = 0; 13 int nr_iterations = 0; 14 int i; 15 16 omp_init_lock(&lck); 17 #pragma omp parallel shared(lck) 18 { 19 #pragma omp for 20 for(i = 0; i < LOOPCOUNT; i++) { 21 omp_set_lock(&lck); 22 #pragma omp flush 23 nr_threads_in_single++; 24 #pragma omp flush 25 nr_iterations++; 26 nr_threads_in_single--; 27 result = result + nr_threads_in_single; 28 omp_unset_lock(&lck); 29 } 30 } 31 omp_destroy_lock(&lck); 32 33 return ((result == 0) && (nr_iterations == LOOPCOUNT)); 34 } 35 main()36int main() 37 { 38 int i; 39 int num_failed=0; 40 41 for(i = 0; i < REPETITIONS; i++) { 42 if(!test_omp_lock()) { 43 num_failed++; 44 } 45 } 46 return num_failed; 47 } 48