Partager via


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);
}
  

Voir aussi

Référence

Directives OpenMP