int r, r2, r3; void foo (void) { int i = 0, j = 0, k = 0; #pragma omp scope private (i) reduction (+:r) nowait { i = 1; r++; } #pragma omp scope private (i) reduction (task, +:r) #pragma omp scope private (j) reduction (task, +:r2) #pragma omp scope private (k) reduction (task, +:r3) { i = 1; j = 2; k = 3; r++; r2++; r3++; } #pragma omp parallel { #pragma omp scope reduction (+:r) private (i) nowait { #pragma omp scope reduction (+:r2) private (j) nowait { #pragma omp single { i = 1; j = 2; r++; r2++; } } } } }