Anterior Siguiente

Para denotar explícitamente una variable como privada, usamos la cláusula private. La variable debe haber sido definida antes de la región paralela.

Sintaxis básica

En el caso de la directiva parallel, la sintaxis es la siguiente:

#pragma omp parallel private(<var1[,var2,var3,...]>)
{
    <parallel region code>
}

Ejemplo

Dentro de la región paralela compararemos una variable compartida y una privada, ambas explícitamente tipificadas, para determinar cuál es el hilo maestro:

#include <stdio.h>
#include <omp.h>

int main(){
    int t = -1;
    int m = omp_get_thread_num();
    printf("master thread=%d in serial region\n", m);
    
    #pragma omp parallel shared(m) private(t)
    {
        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);
    printf("value of t=%d\n", t);
}

Descarga el código aquí.

¿Cómo compilar?

clang -fopenmp -I/home/user/llvm/llvm-build/projects/openmp/runtime/src/ 
     -o private-000 private-000.c

¿Cómo ejecutar?

./private-000 

Salida

master thread=0 in serial region
master thread=0 in parallel region
thread=1 in parallel region
thread=3 in parallel region
thread=2 in parallel region
master thread=0 in serial region
value of t=-1

t conserva su valor original una vez termina la región paralela.

Preguntas

  • Modifica el programa y haz de t una variable compartida.
  • ¿Qué pasaría en este caso?
Anterior Siguiente
Estás en el Nivel 1: Introducción a la programación paralela con OpenMP. ¿Deseas volver al inicio?