Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2. Procesos
1) Implemente el c el siguiente código, compile y ejecute. Determine qué parte de código ejecuta el proceso
padre y qué parte del código ejecutan los procesos hijos. Dibujar con diagramas la jerarquía de procesos (pro-
ceso padre y procesos hijos). Ejecute reiterada veces. ¿Observa algún comportamiento extraño?. ¿Qué hace la
instrucción break dentro del código? ¿Quién ejecuta las iteraciones del for? ¿Cómo varía para cada proceso la
variable i?
#include <sys/types.h>
#include <stdio.h>
int main()
{
pid_t pid;
int i;
int n = 10;
#include <sys/types.h>
#include <stdio.h>
int main()
{
pid_t pid;
int i;
int n = 10;
return 0;
4) Implemente el siguiente código, compile y ejecute. Determine qué parte de código ejecuta el proceso padre
y qué parte del código ejecutan los procesos hijos. Dibujar con diagramas la jerarquía de procesos (proceso
padre y procesos hijos). Ejecute reiterada veces. ¿Cuál es la diferencia con los códigos anteriores? ¿Qué hace
la instrucción break dentro del código? ¿Quién ejecuta las iteraciones del for? ¿Cómo varía para cada proceso
la variable n?
#include <sys/types.h>
#include <stdio.h>
int main()
{
pid_t pid;
int i;
int n = 10;
5) Implemente el siguiente código, compile y ejecute. Determine qué parte de código ejecuta el proceso padre
y qué parte del código ejecutan los procesos hijos. Dibujar con diagramas la jerarquía de procesos (proceso
padre y procesos hijos). Ejecute reiterada veces. ¿Cuál es la diferencia con los códigos anteriores? ¿Qué hace
la instrucción wait dentro del código? ¿Quién ejecuta las iteraciones del for? ¿Este código es secuencial?
#include <sys/types.h>
#include <stdio.h>
int main()
{
pid_t pid;
int i;
int n = 10, valor;
}
else
{
wait(pid);
printf("Padre:%d sincroniza con:%d \n", getpid(), pid);
}
}
return(0); //hijo
3. Threads
Nota: para compilar incluir la libreria pthread.h. Por ejemplo gcc uno.c -o uno -lpthread
6) a) Implemente el siguiente código, compile y ejecute. Determine qué realiza cada parte del código. Ejecute
reiteradas veces. ¿Siempre terminan todos los threads? b) Descomente la instrucción sleep(5), compile y
ejecute nuevamente. ¿Qué hace dicha instrucción? ¿qué efecto tiene en este código?
#include <pthread.h>
#include <stdio.h>
#defin MAX 10
int main()
{
int j;
pthread_attr_t attr;
pthread_t thid[MAX];
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
// sleep(5);
return 0;
}
7) Implemente el siguiente código, compile y ejecute. Determine qué realiza cada parte del código. Ejecute
reiteradas veces. ¿Siempre terminan todos los threads? Comente las lineas con las instrucciones pthread_join()
y vuelva a ejecutar reiteradas veces. Describa y justifique el comportamiento observado.
#include <pthread.h>
#include <stdio.h>
pthread_exit(0);
}
int main()
{
pthread_t th1, th2;
pthread_join(th1,NULL);
pthread_join(th2,NULL);
return 0;
}
8) Implemente el siguiente código, compile y ejecute. Determine qué realiza cada parte del código. Ejecute
reiteradas veces. ¿Siempre terminan todos los threads? Comente las lineas con las instrucciones pthread_join()
y vuelva a ejecutar reiteradas veces. Describa y justifique el comportamiento observado.
#include <pthread.h>
#include <stdio.h>
#define NUM 5
int main()
{
pthread_t th[NUM];
pthread_attr_t attr;
int num;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
int i;
for(i = 0; i < NUM; i++)
{
scanf("%d ",&num);
pthread_create(&th[i], &attr, imprimir,(void*)num);
}
printf("Termina thread del main() \n");
return 0;
}
Agregue al código anterior, al final del main(), el siguiente código. Saque conclusiones del nuevo comporta-
miento observado.