You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // RUN: %libomp-compile-and-run
 | |
| #include "omp_testsuite.h"
 | |
| #include <stdio.h>
 | |
| 
 | |
| // This should be slightly less than KMP_I_LOCK_CHUNK, which is 1024
 | |
| #define LOCKS_PER_ITER 1000
 | |
| #define ITERATIONS (REPETITIONS + 1)
 | |
| 
 | |
| // This tests concurrently using locks on one thread while initializing new
 | |
| // ones on another thread.  This exercises the global lock pool.
 | |
| int test_omp_init_lock() {
 | |
|   int i;
 | |
|   omp_lock_t lcks[ITERATIONS * LOCKS_PER_ITER];
 | |
| #pragma omp parallel for schedule(static) num_threads(NUM_TASKS)
 | |
|   for (i = 0; i < ITERATIONS; i++) {
 | |
|     int j;
 | |
|     omp_lock_t *my_lcks = &lcks[i * LOCKS_PER_ITER];
 | |
|     for (j = 0; j < LOCKS_PER_ITER; j++) {
 | |
|       omp_init_lock(&my_lcks[j]);
 | |
|     }
 | |
|     for (j = 0; j < LOCKS_PER_ITER * 100; j++) {
 | |
|       omp_set_lock(&my_lcks[j % LOCKS_PER_ITER]);
 | |
|       omp_unset_lock(&my_lcks[j % LOCKS_PER_ITER]);
 | |
|     }
 | |
|   }
 | |
|   // Wait until all repititions are done.  The test is exercising growth of
 | |
|   // the global lock pool, which does not shrink when no locks are allocated.
 | |
|   {
 | |
|     int j;
 | |
|     for (j = 0; j < ITERATIONS * LOCKS_PER_ITER; j++) {
 | |
|       omp_destroy_lock(&lcks[j]);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   return 0;
 | |
| }
 | |
| 
 | |
| int main() {
 | |
|   // No use repeating this test, since it's exercising a private global pool
 | |
|   // which is not reset between test iterations.
 | |
|   return test_omp_init_lock();
 | |
| }
 |