(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
task-detach-9.c
       1  /* { dg-do run } */
       2  
       3  #include <omp.h>
       4  #include <assert.h>
       5  
       6  /* Test tasks with detach clause.  Each thread spawns off a chain of tasks
       7     in a taskgroup, that can then be executed by any available thread.  */
       8  
       9  int main (void)
      10  {
      11    int x = 0, y = 0, z = 0;
      12    int thread_count;
      13    omp_event_handle_t detach_event1, detach_event2;
      14  
      15    #pragma omp parallel private (detach_event1, detach_event2)
      16      #pragma omp taskgroup
      17      {
      18        #pragma omp single
      19  	thread_count = omp_get_num_threads ();
      20  
      21        #pragma omp task detach (detach_event1) untied
      22  	#pragma omp atomic update
      23  	  x++;
      24  
      25        #pragma omp task detach (detach_event2) untied
      26        {
      27  	#pragma omp atomic update
      28  	  y++;
      29  	omp_fulfill_event (detach_event1);
      30        }
      31  
      32        #pragma omp task untied
      33        {
      34  	#pragma omp atomic update
      35  	  z++;
      36  	omp_fulfill_event (detach_event2);
      37        }
      38      }
      39  
      40    assert (x == thread_count);
      41    assert (y == thread_count);
      42    assert (z == thread_count);
      43  }