Directiva Barrier
Anterior | Siguiente |
Hay situaciones en las que queremos controlar específicamente la sincronización de los hilos. Podemos insertar una barrera explícita que fuerce a todos los hilos a reunirse allí.
Sintaxis básica
#pragma omp parallel
{
<parallel region code>
#pragma omp barrier // explicit barrier here
<parallel region code>
} // implicit barrier here
Ejemplo
Vamos a asegurarnos de que los hilos se despidan en bloque:
#include <stdio.h>
#include <omp.h>
int main(){
int m = omp_get_thread_num();
printf("master thread=%d in serial region\n", m);
#pragma omp parallel
{
int t = omp_get_thread_num();
printf("thread=%d in parallel region\n", t);
#pragma omp barrier
printf("thread=%d says goodbye\n", t);
} // implicit barrier here
printf("master thread=%d in serial region\n", m);
}
¿Cómo compilar?
clang -fopenmp -I/home/user/llvm/llvm-build/projects/openmp/runtime/src/
-o barrier-000 barrier-000.c
¿Cómo ejecutar?
./barrier-000
Salida
master thread=0 in serial region
thread=0 in parallel region
thread=3 in parallel region
thread=2 in parallel region
thread=1 in parallel region
thread=0 says goodbye
thread=3 says goodbye
thread=1 says goodbye
thread=2 says goodbye
master thread=0 in serial region
Preguntas
- Modifica el programa de la directiva single, prescindiendo de aquella directiva pero logrando la misma funcionalidad.
Anterior | Siguiente |
Estás en el Nivel 1: Introducción a la programación paralela con OpenMP. ¿Deseas volver al inicio?