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

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Sistemas Operativos
| |-+  GNU/Linux
| | |-+  Unix/Unix-Like
| | | |-+  procesos concurrentes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: procesos concurrentes  (Leído 5,177 veces)
ferminta

Desconectado Desconectado

Mensajes: 33


Ver Perfil
procesos concurrentes
« en: 13 Enero 2012, 19:29 pm »

tengo un Caso de procesos concurrentes que no logro ver donde falla:


Se trata de la realización de un programa en C llamado padre que deberá crear un proceso “hijo” el cual deberá calcular los 10 primeros números de la sucesión de Fibonacci e imprimirlos por salida estándar (formato “ HIJO: fibonacci % N =%M\n ”
donde %N y %M representan el índice y el valor del correspondiente número de la sucesión)
 
Mientras el ”hijo” realiza el cálculo, el “padre” deberá esperar a que termine. Una vez haya terminado, el hijo comunicará al proceso “padre” la información necesaria para poder continuar con el cálculo de la sucesión. De esa manera el padre podrá continuar y calcular los siguientes 10 números de la sucesión e imprimirlos por salida estándar (formato “ PADRE: fibonacci %N=%M\n”
donde %N y %M representan el índice y el valor del correspondiente número de la sucesión)
Se trata de que el  “padre” no deberá nunca calcular la sucesión desde el inicio.




Resuelvo el problema  creando un proceso hijo, realizando la llamada al sistema fork.
Después compruebo si estoy  en el proceso hijo, y entonces ejecuto diez iteraciones de la sucesión de Fibonacci :  if (fork()==0…..etc.., y voy pintando por pantalla los resultados

A partir de aquí debe continuar el proceso padre, después de que el hijo haga un exit al terminar el bucle:
Puntos:
1-       Escribo  un wait para que el padre espere a que termine el hijo.
2-        Antes de que el hijo haga el exit, paso al proceso padre los dos últimos valores que calculó el proceso hijo, para que el padre siga con la serie.
 
El punto dos al tratarse de dos procesos independientes (cada uno con su PID) ejecutándose de manera concurrente, utilizo de un mecanismo de comunicación entre procesos para pasar estas variables de un proceso a otro.
(paso los valores de la serie de Fibonacci t9 y t10 del hijo al padre (para que este último calcule el t11):

Después de calcular el hijo los valores de la serie y haberlos almacenado en un array 1..10, utilizo dos tuberías sin nombre,las abrire en el extremo de escritura y pasar los dos últimos valores del array, uno en cada tubería. El padre, después de que el hijo haga el exit, leerá las tuberías y con estos valores seguirá con la serie.


En código:

#define N=10
#include<stdio.h>
#define M
#include<unistd.h>
#include<stdlib.h>
#include<wait.h>

int main ()
{
int tabla[10];
int i,j;
int estadohijo;
int sig;
int mipipeone[2];
int mipipetwo[2];
int leido1,leido2;

pipe(mipipeone);
pipe(mipipetwo);
if(fork()==0)
{
printf("Proceso hijo/n");
printf("%d/n",0);
scanf("%d",& tabla[0]);
printf("%d/n",1);
scanf("%d",& tabla[1]);
 
for (i=2;i<=10;i++)
{
tabla=tabla[i-1] + tabla[i-2];
scanf("%d",tabla);
printf("%d", tabla);
}
write(mipipeone[1],tabla[9],1);
write(mipipetwo[1],tabla[10],1);
exit;
else
{
wait (& estadohijo);
printf (“Proceso Padre/n”);
leido1=read(mipipeone[0],tabla[9],1);
leido2=read(mipipetwo[0],tabla[10],1);
sig=leido1+leido2;
scanf("%d",sig);
printf("%d",sig]);
while (j<M)
{
leido2=sig;
sig=sig+leido2;
scanf("%d",sig);
printf("%d",sig]);
}
   }


En línea

Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: procesos concurrentes
« Respuesta #1 en: 15 Enero 2012, 00:10 am »

He respondido en tu otro post de Programacion en C/C++


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Procesos
Programación Visual Basic
Thaorius 2 1,983 Último mensaje 15 Julio 2005, 03:28 am
por Thaorius
¡¡¡ver procesos!!!! « 1 2 »
Programación Visual Basic
zerofive 17 5,041 Último mensaje 8 Julio 2006, 21:29 pm
por megateam
Listar procesos y realizar cosas con los procesos
Programación Visual Basic
sebas369 2 3,152 Último mensaje 14 Julio 2006, 16:08 pm
por sebas369
Conexiones concurrentes en obexftp
Hacking Mobile
bluga 3 4,216 Último mensaje 19 Mayo 2009, 09:16 am
por SirGraham
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines