/*
 * Cada thread tem um identificador Ășnico!
 */ 
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

void* f_thread(void *v) {
  int thr_id;
  int *ret;

  sleep(1);
  thr_id = *(int *) v;
  ret  = (int *) malloc (sizeof (int));
  printf("Thread %d.\n", thr_id);
  *ret = thr_id;
  return (void*) ret;
}

int main() {
  pthread_t thr[10];
  int* r_id;
  int i, id[10];

  for (i = 0; i < 10; i++) {
    id[i] = i;
    pthread_create(&thr[i], NULL, f_thread, (void*) &id[i]);
  }

  for (i = 0; i < 10; i++) {
    pthread_join(thr[i], (void**) &r_id);
    printf("Valor de retorno %d.\n", *r_id);
  }

  return 0;
}