critical
Spécifie que le code est que ne soit exécuté sur un thread à la fois.
#pragma omp critical [(name)]
{
code_block
}
Notes
où,
- (name) (facultatif)
Un nom pour identifier le code critique. Notez que le nom doit être mis entre parenthèses.
Notes
La directive de critique ne prend en charge aucune clauses OpenMP.
Pour plus d'informations, consultez 2.6.2 Construction critical.
Exemple
// 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);
}