Implementing SINGLE construct (GNU libgomp)

### 13.14 Implementing SINGLE construct ¶

A block like

      #pragma omp single
      {
        body;
      }

becomes

      if (GOMP_single_start ())
        body;
      GOMP_barrier ();

while

      #pragma omp single copyprivate(x)
        body;

becomes

      datap = GOMP_single_copy_start ();
      if (datap == NULL)
        {
          body;
          data.x = x;
          GOMP_single_copy_end (&data);
        }
      else
        x = datap->x;
      GOMP_barrier ();