Les directives critical et atomic peuvent être utilisées pour protéger la mise à jour d’une variable partagée. Expliquer la différence principale entre ces deux directives et donner un exemple
时间: 2023-11-28 10:49:37 浏览: 88
vue.js自定义组件directives的实例代码
Les directives `critical` et `atomic` sont toutes les deux utilisées pour protéger la mise à jour d'une variable partagée, mais il y a une différence importante entre les deux.
La directive `critical` permet de protéger un bloc de code qui accède à une variable partagée en garantissant que ce bloc de code ne sera jamais exécuté par plusieurs threads simultanément. En d'autres termes, lorsque le premier thread entre dans le bloc `critical`, tous les autres threads doivent attendre que le premier thread en sorte avant de pouvoir accéder à la variable partagée. Voici un exemple :
```
#pragma omp parallel
{
int x = 0;
#pragma omp critical
{
x++; // Accès à la variable partagée "x" protégé par une zone critique
}
}
```
Dans cet exemple, chaque thread ajoute 1 à la variable `x`, mais l'accès à cette variable est protégé par une zone critique. Lorsqu'un thread entre dans la zone critique, il verrouille l'accès à la variable `x` jusqu'à ce qu'il en sorte.
La directive `atomic` est similaire à `critical`, mais elle est utilisée pour des opérations atomiques, c'est-à-dire des opérations qui doivent être exécutées en une seule étape sans être interrompues par d'autres threads. Les opérations atomiques courantes incluent l'incrémentation ou la décrémentation d'une variable. Voici un exemple :
```
#pragma omp parallel
{
int x = 0;
#pragma omp atomic
x++; // Incrémentation atomique de la variable partagée "x"
}
```
Dans cet exemple, chaque thread incrémente la variable `x`, mais l'opération est protégée par une instruction atomique. Cela garantit que chaque thread effectue l'incrémentation en une seule étape sans être interrompu par d'autres threads.
En résumé, la directive `critical` est utilisée pour protéger un bloc de code qui accède à une variable partagée, tandis que la directive `atomic` est utilisée pour protéger des opérations atomiques sur une variable partagée.
阅读全文