/******************
**
** Multi-threaded "Hello World" program
**
*/

#define _REENTRANT
#include <pthread.h>
#include <stdio.h>

/* function prototypes */
void* outputMsg( void* );

/* mutex variables */
pthread_mutex_t printfLock = \
  PTHREAD_MUTEX_INITIALIZER;

int main( void )
{
  pthread_t thr1, thr2;
  const char* msg1 = "Hello ";
  const char* msg2 = "world ";

  pthread_create( &thr1, NULL, outputMsg, \
    (void*)msg1 );
  pthread_create( &thr2, NULL, outputMsg, \
    (void*)msg2 );

  pthread_join( thr1, NULL );
  pthread_join( thr2, NULL );

  printf( "\n" );

  return 0;
}


void* outputMsg( void* msg )
{
  int i;

  for( i = 0; i < 10; ++i ) {
    pthread_mutex_lock( &printfLock );
    printf( (char*)msg );
    pthread_mutex_unlock( &printfLock );
  }
  return NULL;
}