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

static pthread_barrier_t barrier;
static pthread_barrierattr_t barrierAttr;

void *thread1(void *parg)
{
      pthread_barrier_wait(&barrier);

     while(1)
     {
       printf("Printing from thread 1\n");
       fflush(stdout);
      }
             
       return NULL;
}

void *thread2(void *parg)
{
      pthread_barrier_wait(&barrier);

     while(1)
     {
       printf("Printing from thread 2\n");
       fflush(stdout);
     }

       return NULL;
}


int main(int argc, char *argv[])
{
      pthread_t threadID;
      pthread_attr_t threadAttr;
      
      pthread_barrierattr_init(&barrierAttr);
      pthread_barrier_init(&barrier, &barrierAttr, 3);
      
      pthread_attr_init(&threadAttr);
      pthread_attr_setdetachstate(&threadAttr, PTHREAD_CREATE_DETACHED);
      
      pthread_create(&threadID, &threadAttr, thread1, NULL);
      pthread_create(&threadID, &threadAttr, thread2, NULL);
      
      pthread_barrier_wait(&barrier);
      
      while(1)
         sleep(1);
         
      return 0;
      
}

