Variables compartidas con la cláusula Shared
Anterior | Siguiente |
Para denotar explícitamente una variable como compartida, usamos la cláusula shared
. Las cláusulas actúan como modificadores de las directivas.
Sintaxis básica
En el caso de la directiva parallel
, la sintaxis es la siguiente:
#pragma omp parallel shared(<var1[,var2,var3,...]>)
{
<parallel region code>
}
Ejemplo
Dentro de la región paralela compararemos una variable compartida y una interna para determinar cuál es el hilo maestro:
#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 shared(m)
{
int t = omp_get_thread_num();
if(t==m)
printf("master thread=%d in parallel region\n", m);
else
printf("thread=%d in parallel region\n", t);
}
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 shared-000 shared-000.c
¿Cómo ejecutar?
./shared-000
Salida
master thread=0 in serial region
thread=2 in parallel region
master thread=0 in parallel region
thread=3 in parallel region
thread=1 in parallel region
master thread=0 in serial region
Preguntas
- ¿Qué pasaría si no usáramos la cláusula shared?
- Modifica el programa de tal manera que haya una condición de carrera al usar la variable compartida
- ¿Cómo resolverías ese conflicto?
- ¿Cuándo recomendarías usar variables compartidas?
Anterior | Siguiente |
Estás en el Nivel 1: Introducción a la programación paralela con OpenMP. ¿Deseas volver al inicio?