Dev - C++ - ¿Cómo puedo ejecutar dos bucles while en paralelo ?

   
Vista:

¿Cómo puedo ejecutar dos bucles while en paralelo ?

Publicado por Nacho (3 intervenciones) el 21/12/2014 14:02:52
Buenas, mi duda es como puedo ejecutar dos bucles while independientementes a la misma vez. Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de vangodp

¿Cómo puedo ejecutar dos bucles while en paralelo ?

Publicado por vangodp (287 intervenciones) el 21/12/2014 15:04:47
usando hilos o procesos separados.
http://es.wikipedia.org/wiki/Hilo_de_ejecuci%C3%B3n
http://es.wikipedia.org/wiki/Bifurcaci%C3%B3n_%28sistema_operativo%29

Deberias leer: http://es.wikipedia.org/wiki/Computaci%C3%B3n_paralela

Para algo mas avanzado: http://es.wikipedia.org/wiki/OpenMP

Tampoco has dicho si es C, C++ o otro lenguaje. Asi que poco se puede hacer de esta forma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¿Cómo puedo ejecutar dos bucles while en paralelo ?

Publicado por Nacho (3 intervenciones) el 21/12/2014 15:23:09
El lenguaje en realidad es Matlab, pero es muy parecido a C++, por lo que supuse que sería muy parecido. Por otra parte leí algo de los hilos que nombras pero no lo entendí muy bien.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

¿Cómo puedo ejecutar dos bucles while en paralelo ?

Publicado por vangodp (287 intervenciones) el 22/12/2014 00:21:42
Los hilos (Threads en ingles) son la posibilidad de ejecutar un programa de forma paralela por así decir. El programa se divide en "Hilos" de ejecución.
Imaginas un bar... Eres un camarero. Alguien te pide un plato elaborado, vas tu y lo haces. ¿Nada nuevo no? Pero imaginas que mientras estas preparando un plato elaborado que tarda mucho y te aparece un cliente queriendo una tapita XDD. No estas "preso" al plato elaborado, puedes salir en un momento dejando el "plato elaborado" y servir la tapa, luego vuelves nuevamente al plato elaborado.
Técnicamente no eso lo que hace los hilos. Seria mas bien que sueltas el cuchillo al elaborar el plato y sirves una aceituna de la tapa, luego vuelves al cuchillo y así sucesivamente cortas un filete y sirves una aceituna de la tapa... Eso te posibilita hacer 2 cosas a la vez con Hilos.

Mira, aquí tienes un ejemplo.
Si entiendes algo de C o C++ no te costara mucho.
http://codepad.org/X5tGquPJ
Se crean tres hilos a lo cual envías una función a cada hilo. Las funciones son sencillas, solo contienen un bucle for en cada una de ellas, la diferencia es que cada una imprime un caracter distinto. Una imprime la X, otra el simbolo+ etc etc.
Si entiendes de programación sabes que es imposible que se mezcle el contenido de cada función. si llamas 1º la funcion1 luego la funcion2 y luego la 3 sabes que se va ejecutar el for de la 1º, luego el for de la 2º y por ultimo el for de la 3º. Lo que digo es que se ejecuta de forma lineal.
Pero al enviar una función a cada hilo, notaras como salen mezclados esos X+O en un orden que no controlamos, pues es el PC que se encarga de ejecutar cachitos a cachitos cada bucle. Es como barajar cartas, tu las puedes dar ordenadas pero el procesador se encarga de "cocinar" el plato y servir la "tapa" al mismo tiempo.
Al final los hilos deben retornar al hilo principal.
Debes leer algo sobre hilos. Y ademas no se como sera eso en matlab.
Otra cosa son los procesos, pero ahí nunca me metí yo y apenas se nada.
Los hilos también hay formas de controlarlos ya que de dejarlos sueltos puede que cocines el plato antes de servir las aceitunas y puede que no sea eso lo que quieres.
Existen los Semáforos y otros mecanismos que controlan si un hilo debe detener hasta que otro realice una determinada tarea ya que un hilo puede terminar antes que otro y no es eso lo que buscas. Todo depende de lo que necesites hacer.


En ese vídeo puedes ver como hace para mezclar 2 funciones que en cada una hay un bucle for. Notaras que cada función imprime un mensaje, y que esos mensajes se "mezclan" entre ellos al imprimir en pantalla.

El tema es algo complicado se necesita practicar algo para entenderlo pero para algunas cosas es esencial.
Un ejemplo es mostrar por ejemplo un cronometro en segundos en la tela mientras estas calculando algo.
Eso es imposible de hacer.
Intente hacer un un programa que vaya mostrando los segundos pasados hasta que el usuario pulsa un botón. O_O El programa se va detener a esperar ese botón y no va mostrar los segundos XDDD.
Si haces un hilo que vaya mostrando los segundos mientras el hilo principal espera esa pulsación problema resuelto XDDD
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

¿Cómo puedo ejecutar dos bucles while en paralelo ?

Publicado por Nacho (3 intervenciones) el 22/12/2014 09:14:20
Muchas gracias por tu ayuda, la verdad que la explicación del bar es muy buena para entenderlo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de vangodp

¿Cómo puedo ejecutar dos bucles while en paralelo ?

Publicado por vangodp (287 intervenciones) el 22/12/2014 14:22:32
A ver... el ejemplo no es mio pero me sirvió cuando lo busque.
2 procesos son 2 programas independientes, no comparten memoria y por eso no necesitas sincronizarlos, pero si necesitas el sistema para intercambiar datos entre procesos.

2 hilos están en un mismo proceso y por eso comparten datos, a consecuencia de eso necesitas sincronizarlos con algunos métodos como semáforos y otros para que por ejemplo un hilo no modifique un dato por ejemplo, antes que lo esperado, O bien como en el caso del "cronometro" que describí anteriormente.

Bueno recuerda que una tarea es un proceso. Es como la tarea de servir en un bar, y un pero puedo servir copas y cocinar al "mismo" tiempo. No al mismo tiempo por que eso es impocible, pero si puedo parar hacer una cosa, y retornar a lo que estaba.

En realidad solo se puede hacer una cosa a la vez, pero si paramos de hacer una y hacemos otra da la sensación de hacer 2 cosas a la vez. Pero eso tiene un coste...Ese tiempo que tardo en soltar el cuchillo de cocina y agarro una vaso para servir la copa me hace perder tiempo.
Al igual cuando vas a cocinar, necesitas "preparar" la cocina por así decir, el procesador se prepara para realizar una tarea, y al cambiar digamos que se prepara nuevamente para hacer otra.

En fin lo que quiero decir es que no abuses de muchos hilos y procesos por que en realidad estas dividiendo la capacidad del procesador entre realizar 2 cosas a la vez.

Eso se solvento con los procesadores multinucleos que literalmente si que se puede ejecutar 2 programas paralelamente ya que cada nucleo trabaja de forma independiente(Es como tener 2 camareros XD). Pero a tanto no llego yo XDDD

Bueno de tanto hablar de copas y cocinar me esta entrando hambre >_<.
No te puedo ayudar mucho ya que para mi esto todo también es nuevo, pero lo importante es saber la diferencia entre ambos. Para algo esta el gran amigo google que nos ayuda =).

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar