crítico
Especifica que es el código se ejecuta sólo en un subproceso cada vez.
#pragma omp critical [(name)]
{
code_block
}
Comentarios
donde
- (name) (opcional)
un nombre para identificar el código crítico.Observe que el nombre se debe agregar entre paréntesis.
Comentarios
la directiva de Crtico no admite ninguna cláusula de OpenMP.
Para obtener más información, vea Construcción crítica 2.6.2.
Ejemplo
// omp_critical.cpp
// compile with: /openmp
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
int main()
{
int i;
int max;
int a[SIZE];
for (i = 0; i < SIZE; i++)
{
a[i] = rand();
printf_s("%d\n", a[i]);
}
max = a[0];
#pragma omp parallel for num_threads(4)
for (i = 1; i < SIZE; i++)
{
if (a[i] > max)
{
#pragma omp critical
{
// compare a[i] and max again because max
// could have been changed by another thread after
// the comparison outside the critical section
if (a[i] > max)
max = a[i];
}
}
}
printf_s("max = %d\n", max);
}