48 lines · c
1// RUN: %libomp-compile-and-run2// RUN: env KMP_LOCK_KIND=tas %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_test_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 while (!omp_test_lock (&lck))22 {};23 #pragma omp flush24 nr_threads_in_single++;25 #pragma omp flush26 nr_iterations++;27 nr_threads_in_single--;28 result = result + nr_threads_in_single;29 omp_unset_lock (&lck);30 }31 }32 omp_destroy_lock(&lck);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_test_lock()) {43 num_failed++;44 }45 }46 return num_failed;47}48