elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programación paralela
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programación paralela  (Leído 3,004 veces)
zairillo

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Programación paralela
« en: 14 Abril 2011, 11:47 am »

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:
Código:
#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:
#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!


« Última modificación: 15 Abril 2011, 13:31 pm por zairillo » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines