48 lines · c
1// RUN: %libomp-compile-and-run2// RUN: env KMP_LOCK_KIND=tas KMP_SPIN_BACKOFF_PARAMS=2048,200 %libomp-run3// RUN: env KMP_LOCK_KIND=futex %libomp-run4#include <stdio.h>5#include "omp_testsuite.h"6 7omp_lock_t lck;8 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 for20 for(i = 0; i < LOOPCOUNT; i++) {21 omp_set_lock(&lck);22 #pragma omp flush23 nr_threads_in_single++;24 #pragma omp flush25 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 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