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

#include <unistd.h>
#include <time.h>
#include <pthread.h>
//#include <sched.h>

void* func(void*);
main()
  {
    pthread_t t[4];
  pthread_attr_t attr;
  int* pFlag;
  pFlag  = new int;
 *pFlag = 1;
  void* status;
 
  pthread_attr_init(&attr);
  pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM);
  pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);

   printf( "Main 1 %d\n" ,  *pFlag );;

   for (int i = 0; i < 4; i++) {
  pthread_create(&t[i], &attr, func, (void*) pFlag);
  //  pthread_create(&t, NULL, func, (void*) pFlag);
  // pthread_create(&t2, &attr, func, (void*) pFlag);

   }
  for (int j = 0; j< 4; j++){    pthread_join(t[j], &status); 
  printf("Main 2: \t Thread returning status: %d\n",
	 status);}
  }


void* func(void* p)
  {
  int* pFlag = (int*) p;
  
printf ("Sub 1 %d\n",*pFlag);
  pthread_yield();     
  sleep(4); // sleep (time()%6 +1)
  *pFlag = *pFlag + 12;
  printf ("Sub 2 %d\n",*pFlag);
  
  return((void *)*pFlag);

  }



