flush (OpenMP)
Spécifie que tous les threads ont le même point de vue de la mémoire pour tous les objets partagés.
#pragma omp flush [(var)]
Notes
où,
- var (facultatif)
Une liste avec la virgule comme séparateur des variables qui représentent des objets vous souhaitez synchroniser. Si var n'est pas spécifié, toute la mémoire doit être vidée.
Notes
La directive de vide ne prend en charge aucune clauses OpenMP.
Pour plus d'informations, consultez 2.6.5 Directive flush.
Exemple
// omp_flush.cpp
// compile with: /openmp
#include <stdio.h>
#include <omp.h>
void read(int *data) {
printf_s("read data\n");
*data = 1;
}
void process(int *data) {
printf_s("process data\n");
(*data)++;
}
int main() {
int data;
int flag;
flag = 0;
#pragma omp parallel sections num_threads(2)
{
#pragma omp section
{
printf_s("Thread %d: ", omp_get_thread_num( ));
read(&data);
#pragma omp flush(data)
flag = 1;
#pragma omp flush(flag)
// Do more work.
}
#pragma omp section
{
while (!flag) {
#pragma omp flush(flag)
}
#pragma omp flush(data)
printf_s("Thread %d: ", omp_get_thread_num( ));
process(&data);
printf_s("data = %d\n", data);
}
}
}