#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>

#define NUM_THREADS     5

void *PrintHello(void *threadid)
{
  int *ptr = (int *) threadid;
  printf("Hello World! It's me, thread #%d!\n", *ptr);
  pthread_exit(NULL);
}

int main (int argc, char *argv[])
{
   pthread_t threads[NUM_THREADS];
   int myid[NUM_THREADS];
   int rc;
   int t;
   
   for(t=0; t<NUM_THREADS; t++) {
     myid[t] = t;
     printf("In main: creating thread %d\n", t);
     rc = pthread_create(&threads[t], NULL, PrintHello, (void *) &myid[t]);
     if (rc) {
       printf("ERROR; return code from pthread_create() is %d\n", rc);
       exit(0);
     }
   }
   
   for (t=0; t < NUM_THREADS; t++) {
     pthread_join(threads[t], NULL);
     printf("Joined thread %d\n", t);
   }
       
   /* Last thing that main() should do */
   pthread_exit(NULL);
}

