#include <stdio.h>
#include <pthread.h>
#include <asm/errno.h>
#include <stdlib.h>
#include <time.h>

pthread_t t1,t2,t3;
int zufallszahl;

void cancel_test1()
{
  if(zufallszahl>25)
   {
     pthread_cancel(t3);
     printf("%d : Habe \"THREAD2\" beendet!\n",zufallszahl);
   }
  printf("TREAD1 zuende\n");
  pthread_exit((void*)0);
}

void cancel_test2()
{
  if(zufallszahl<=25)
   {
     pthread_cancel(t2);
     printf("%d : Habe \"THREAD1\" beendet!\n",zufallszahl);
   }
  printf("THREAD2 zuende\n");
  pthread_exit((void*)0);
}


void zufall(void)
{
  srand(time(NULL));
  zufallszahl=rand()%50;
  pthread_exit(NULL);
}



int main()
{
  if((pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL)) !=0)
   {
      fprintf(stderr,"Fehler bei pthread_setcancelstate.......\n");
      exit(0);
   }

  if((pthread_create(&t1, NULL, (void *)&zufall, NULL)) !=0)
    {
       fprintf(stderr, "Fehler bei ptread_create.........\n");
       exit(0);
    }

  if((pthread_create(&t2, NULL, (void *)&cancel_test1, NULL)) !=0)
    {
      fprintf(stderr, "Fehler bei ptread_create.........\n");
      exit(0);
    }

  if((pthread_create(&t3, NULL, (void *)&cancel_test2, NULL)) !=0)
    {
      fprintf(stderr, "Fehler bei ptread_create.........\n");
      exit(0);
    }

  return 0;
}