Ing. Sistemas

Páginas: 6 (1362 palabras) Publicado: 8 de agosto de 2013
Creación de hilos
En este apartado se aborda el problema de la puesta en marcha y la finalización ordenada de programas con múltiples hilos.
Ejercicio 1
Realizar un programa cuyo hilo principal cree un hilo y espere a que termine. El hilo debe mostrar en pantalla el mensaje "Soy el hilo 1234" (donde 1234 debe ser el identificador del hilo) y terminar.
Sugerencias:
Para la creación del hiloutilizar pthread_create utilizando NULL para indicar que el hilo debe estar asociado con los atributos por defecto.
Para esperar a su finalización utilizar pthread_join usando NULL como segundo parámetro para indicar que no se desea recoger el valor devuelto por el hilo.
Para obtener el identificador de hilo, usar la función pthread_self.
Para imprimir el identificador de hilo, tener en cuentaque es un entero largo sin signo.
Incluir el fichero de cabecera .
Incluir la biblioteca libpthread al enlazar (ej: gcc -Wall -o prueba prueba.c -lpthread).
Ejemplo de solución: "crea-1_noerr.c"
#include
#include
#include


void *hilo(void *arg)
{
printf("Soy el hilo %lu.\n", pthread_self());
return NULL;
}

int main(int argc, char *argv[])
{
pthread_t tid;pthread_create(&tid, NULL, hilo, NULL);
pthread_join(tid, NULL);
return 0;
}
Ejercicio 2
Modificar el programa anterior para que su salida por pantalla sea siempre la siguiente:
Principal: voy a crear un hilo.
Hilo: mi identificador es 1234.
Principal: el hilo 1234 ha terminado.
Las líneas que comienzan por "Principal" deben ser escritas por el hilo principal del programa y las que comienzan por"Hilo" por el hilo que éste crea.
Ejemplo de solución: crea-2_noerr.c
#include
#include
#include


void *hilo(void *arg)
{
printf("Hilo: mi identificador es %lu.\n", pthread_self());
return NULL;
}

int main(int argc, char *argv[])
{
pthread_t tid;

printf("Principal: voy a crear un hilo\n");
pthread_create(&tid, NULL, hilo, NULL);
pthread_join(tid, NULL);printf("Principal: el hilo %lu ha terminado.\n", tid);
return 0;
}
Nótese que la solución produce siempre la misma salida porque el primer mensaje del hilo principal se escribe antes de crear al hilo y el segundo mensaje del hilo principal se escribe después de haber esperado a que el hilo terminase. Por lo tanto, la única posibilidad es que el mensaje del hilo aparezcan siempre entre los dos mensajes delhilo principal.
Ejercicio 3
Realizar un programa cuyo hilo principal cree un hilo y espere a que termine. El hilo creado debe recibir como argumento la dirección de la cadena que contiene el nombre del programa y debe devolver la dirección 0x1234. El hilo principal debe imprimir el valor devuelto por el hilo.
Ejemplo de ejecución:
$ ./crea
Hilo: el nombre del programa es './crea'.
Principal:el hilo ha devuelto 0x1234.
$
Ejemplo de solución: crea-arg_noerr.c
#include
#include
#include


void *hilo(void *arg)
{
printf("Hilo: el nombre del programa es '%s'.\n", (char *)arg);
return (void *)0x1234;
}

int main(int argc, char *argv[])
{
pthread_t tid;
void *p;

pthread_create(&tid, NULL, hilo, argv[0]);
pthread_join(tid, &p);
printf("Principal: el hilo hadevuelto %p.\n", p);
return 0;
}
Ejercicio 4
Realizar un programa cuyo hilo principal cree un hilo por cada argumento que se le pase al programa (sin incluir el nombre del programa) y, después de haberlos creado todos, espere a que terminen antes de terminar él. Cada hilo debe recibir como parámetro la dirección del argumento del programa que le corresponde, debe imprimirlo y debedevolver NULL.
La solución debe permitir que todos los hilos se ejecuten concurrentemente, aunque lógicamente ello supondrá que el orden en el que se listen los argumentos podrá variar de una ejecución a otra.
Ejemplo de solución: crea-argv_noerr.c
#include
#include
#include


void *hilo(void *arg)
{
puts((char *)arg);
return NULL;
}

int main(int argc, char *argv[])
{
int nargs = argc...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Ing de sistemas
  • Ing sistemas
  • Ing de sistemas
  • Ing. Sistemas
  • Ing Sistemas
  • Ing De Sistemas
  • Ing. En Sistemas
  • Ing. De Sistemas

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS