Hola a todos!
Estoy empezando a trabajar con programación paralela pero necesitaría aclarar unos conceptos que, después d buscar por internet, no me quedan claros del todo.
La sentencia #pragma omp parallel lo que hace es crear tantos threads como tu definas, ¿cierto?
Entonces si dentro de esa sentencia pongo por ejemplo:
Lo que hay dentro de la sentencia pragma lo ejecutará cada thread pero mientras uno lo esté ejecutando, otro no tendrá acceso a esa región, quiero decir, un thread empieza a ejecutarlo y cuando termina, empieza el siguiente y así sucesivamente, ¿es así?
Ahora bien, modifico lo siguiente en el programa:
Por lo que cuando un thread lee la barrera, espera a que todos los demás threads lleguen ahí ¿correcto? Pero el problema que tengo es que no entiendo por qué los datos que presenta por pantalla no está en orden como en el caso anterior es decir, si la primera vez que se lee "valor" es 0 y se escribe 10, y la segunda vez se lee 10 y se esribe 20, ¿por qué no siempre va en ese orden?
Espero haberme explicado. Un saludo y muchas gracias!
Estoy empezando a trabajar con programación paralela pero necesitaría aclarar unos conceptos que, después d buscar por internet, no me quedan claros del todo.
La sentencia #pragma omp parallel lo que hace es crear tantos threads como tu definas, ¿cierto?
Entonces si dentro de esa sentencia pongo por ejemplo:
Código [Seleccionar]
#pragma omp parallel shared(valor) //previamente definido a 0
{
id_thread = omp_get_thread_num();
leido = valor;
valor += 10;
escrito = valor;
printf("thread %d, lee valor %d y escribe valor %d", id_thread, leido, escrito);
}
Lo que hay dentro de la sentencia pragma lo ejecutará cada thread pero mientras uno lo esté ejecutando, otro no tendrá acceso a esa región, quiero decir, un thread empieza a ejecutarlo y cuando termina, empieza el siguiente y así sucesivamente, ¿es así?
Ahora bien, modifico lo siguiente en el programa:
Código [Seleccionar]
#pragma omp parallel shared(valor) //previamente definido a 0
{
id_thread = omp_get_thread_num();
#pragma omp barrier
leido = valor;
valor += 10;
escrito = valor;
printf("thread %d, lee valor %d y escribe valor %d", id_thread, leido, escrito);
}
Por lo que cuando un thread lee la barrera, espera a que todos los demás threads lleguen ahí ¿correcto? Pero el problema que tengo es que no entiendo por qué los datos que presenta por pantalla no está en orden como en el caso anterior es decir, si la primera vez que se lee "valor" es 0 y se escribe 10, y la segunda vez se lee 10 y se esribe 20, ¿por qué no siempre va en ese orden?
Espero haberme explicado. Un saludo y muchas gracias!