Typically, some a section of the function or a loop uses the shared variable, its the critical section
Only 1 thread can be executing critical section at a time, other threads can wait
ex:
double area, pi, x; int i, n; area = 0.0; #pragma omp parallel for private(x) for (i = 0; i < n; i++) { x = (i + 0.5)/n; #pragma omp critical area += 4.0 / (1.0 + x*x); } pi = area / n;
the time spent in citical section can be reduced by minize the calculation
double area, pi, x; int i, n; area = 0.0; #pragma omp parallel for private(x) for (i = 0; i < n; i++) { x = (i + 0.5)/n; tmp = 4.0 / (1.0 + x*x); #pragma omp critical area += tmp} pi = area / n;