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

Descarga el código aquí.

¿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?