brintos

brintos / llvm-project-archived public Read only

0
0
Text · 929 B · c512055 Raw
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