Advertisement
d1cor

hilos2.c

Nov 3rd, 2016
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.93 KB | None | 0 0
  1. /*******************************************
  2. * Author     : Diego Cordoba / @d1cor      *
  3. * Purpose    : JuncoTIC - juncotic.com     *
  4. * Contact    : diego@juncotic.com          *
  5. *******************************************/
  6.  
  7. #include<stdio.h>
  8. #include<stdlib.h>
  9. #include<sys/types.h>
  10. #include<sys/stat.h>
  11. #include<unistd.h>
  12. #include<string.h>
  13. #include<fcntl.h>
  14. #include<errno.h>
  15. #include<pthread.h>
  16.  
  17. //Hilos detached (mejor rendimiento)
  18.  
  19. void* funcion(void*);
  20.  
  21. int main(int argc, char** argv) {
  22.  
  23.     char *error;
  24.     int info=1234;
  25.  
  26.     // creamos el id de hilo (pthread_d es un long int)
  27.     pthread_t thread_id;
  28.  
  29.     printf("Tamanio del id: %d\n",sizeof(pthread_t));
  30.  
  31.     //creamos un hilo
  32.  
  33. /*
  34.     int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
  35.     void *(*start_routine) (void *), void *arg);
  36.         *thread: donde almacenar el id del nuevo hilo
  37.         *attr: atributos opcionales para pasarle al hilo (o NULL si no es necesario)
  38.             pthread_attr_init() para cargar los atributos.
  39.  
  40.         start_routine: funcion ejecutada por el thread
  41.         arg: argumentos pasados a la funcion
  42.  
  43. */
  44.  
  45.     if(pthread_create(&thread_id, NULL, funcion, (void*)&info)){
  46.         error="pthread_create";
  47.         goto err;
  48.     }
  49.  
  50.     printf("El id del hilo es: %li\n",thread_id);
  51.  
  52.     //terminamos el hilo principal:
  53.     printf("terminando el hilo principal...\n");
  54.     pthread_exit(NULL);
  55.  
  56.     return 0; //termina el proceso -> tambien terminan todos los hilos
  57.  
  58. err:
  59.     fprintf(stdout,"%s %d - %d\n",error,errno,strerror(errno));
  60.     exit(1);
  61. }
  62.  
  63. void* funcion(void* dato){
  64.     //dato es un argumento pasado al hilo
  65.     //"des-atachamos" el hilo creado del hilo principal
  66.     int dato_en_th;
  67.     pthread_detach(pthread_self());
  68.     sleep(1);
  69.     dato_en_th = *((int*)dato);
  70.     printf("Ejecutando esta linea desde el hilo (TID: %li)\n",pthread_self());
  71.     printf("El dato recibido en el hilo es: %d\n", dato_en_th);
  72.     //terminamos al hilo:
  73.     printf("terminando el hilo creado...\n");
  74.     pthread_exit(NULL);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement