Sábado 14 de Diciembre de 2024, 23:57
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemilla Con Fork()
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Problemilla Con Fork() (Leído 737 veces)
espartako84
Nuevo Miembro
Mensajes: 4
Problemilla Con Fork()
«
en:
Lunes 26 de Noviembre de 2007, 18:53 »
0
Saludos.
tengo que crear un codigo, que cree procesos pesados (por esto he supuesto que se utiliza el fork, en vez de hilos, no?), de manera recurrente, que coexistan entre si, y sean todos hijos del mismo padre.
La intención es que dada un tamaño de una matriz cuadrada, NxN, y un divisor exacto de N, llamado h, divida la matriz, en submatrices, de tamaño hxh.
Habia pensado la siguiente estructura:
Código: Text
#include<stdio.h>
int h;
void hijos2 (int Nv2, int Nh2){
switch (fork()) {
case -1:
printf("Error\n");
break;
case 0:
printf("Es el hijo numero %d cuyo padre es %d, HIJOS2 coordendas %d, %d\n", getpid(), getppid(),Nv2, Nh2);
// fflush(stdout);
break;
default:
if ((Nh2-h) > 0)
hijos2(Nv2, Nh2-h);
break;
}
return;
}
void hijos (int Nv, int Nh) {
switch (fork()) {
case -1:
printf("Error\n");
break;
case 0:
printf("Es el hijo numero %d cuyo padre es %d. HIJOS, coordenadas %d, %d\n", getpid(), getppid(), Nv, Nh);
//fflush(stdout);
break;
default:
if ((Nh-h) > 0)
hijos2(Nv,Nh-h);
if ((Nv-h) > 0)
hijos(Nv-h, Nh);
break;
}
return;
}
main (){
int cas, temp;
printf("Introduzca el numero de casillas, y el divisor: \n");
scanf("%d%d", &cas, &h);
hijos(cas, cas);
}
Tecnicamente la funcion hijos, crea los procesos para analizar las submatrices de la columna Nh, e hijos 2 crea los proceos para analizar la columna.
La salida deberia ser:
Código: Text
Introduzca el numero de casillas, y el divisor:
4 2
Es el hijo numero 25520 cuyo padre es 25519. HIJOS, coordenadas 4, 4
Es el hijo numero 25521 cuyo padre es 25519, HIJOS2 coordendas 4, 2
Es el hijo numero 25524 cuyo padre es 25519. HIJOS, coordenadas 2, 4
Es el hijo numero 25525 cuyo padre es 25519, HIJOS2 coordendas 2, 2
Pero en realidad resulta:
Código: Text
Introduzca el numero de casillas, y el divisor:
4 2
Es el hijo numero 25520 cuyo padre es 25519. HIJOS, coordenadas 4, 4
Es el hijo numero 25521 cuyo padre es 25519, HIJOS2 coordendas 4, 2
Es el hijo numero 25522 cuyo padre es 25521. HIJOS, coordenadas 2, 4
Es el hijo numero 25523 cuyo padre es 25521, HIJOS2 coordendas 2, 2
Es el hijo numero 25524 cuyo padre es 25519. HIJOS, coordenadas 2, 4
Es el hijo numero 25525 cuyo padre es 25519, HIJOS2 coordendas 2, 2
El hijo 25521 le da por reproducirse, y crea 2 vastagos
Y tecnicamente las 2 funciones funcionan bien, ya que si eliminamos
Código: Text
...
default:
// if ((Nh-h) > 0)
// hijos2(Nv,Nh-h);
if ((Nv-h) > 0)
hijos(Nv-h, Nh);
break;
...
o
Código: Text
...
default:
if ((Nh-h) > 0)
hijos2(Nv,Nh-h);
// if ((Nv-h) > 0)
// hijos(Nv-h, Nh);
break;
...
en la funcion hijos, crea perfectamente los subprocesos para la linea o la columna primera de la matriz. No se donde esta el problema, y ya llevo 2 dias dandole vueltas al problema. Os adjunto el archivo con el programa.
Muchas gracias por la antención.
PD: Valla tocho que os he soltado, cuando me lio a escribir
Tweet
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Problemilla Con Fork()