mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			39 lines
		
	
	
		
			680 B
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			680 B
		
	
	
	
		
			C
		
	
	
	
| /* { dg-do run } */
 | |
| 
 | |
| #include <stdio.h>
 | |
| #include <omp.h>
 | |
| void
 | |
| skip (int i)
 | |
| {
 | |
| }
 | |
| 
 | |
| void
 | |
| work (int i)
 | |
| {
 | |
| }
 | |
| int
 | |
| main ()
 | |
| {
 | |
|   omp_lock_t lck;
 | |
|   int id;
 | |
|   omp_init_lock (&lck);
 | |
| #pragma omp parallel shared(lck) private(id)
 | |
|   {
 | |
|     id = omp_get_thread_num ();
 | |
|     omp_set_lock (&lck);
 | |
|     /* only one thread at a time can execute this printf */
 | |
|     printf ("My thread id is %d.\n", id);
 | |
|     omp_unset_lock (&lck);
 | |
|     while (!omp_test_lock (&lck))
 | |
|       {
 | |
| 	skip (id);		/* we do not yet have the lock,
 | |
| 				   so we must do something else */
 | |
|       }
 | |
|     work (id);			/* we now have the lock
 | |
| 				   and can do the work */
 | |
|     omp_unset_lock (&lck);
 | |
|   }
 | |
|   omp_destroy_lock (&lck);
 | |
|   return 0;
 | |
| }
 |