/*
 ******************************************************
 Zadania na cvičenie:- vytvorte simulátor žrebčína. 
 
Máte niekoľko kobýl ktoré majú prístup k spoločnému válovu. 
Každá kobylka sa prechádza vo výbehu, po čase vyhladne a tak ide k válovu a nažerie sa. 
Keďže válov má iba obmedzený objem, po čase sa vyprázdni. 
Kobylka ktorá válov vyprázdnila dá vedieť (erdžaním) správcovi žrebčína ktorý válov opäť naplní. 
Počet kobýl aj objem válova zadajte ako parameter simulátoru

 pocet kobyliiek= 4 
 objem valova =6
 
 ******************************************************
*/


#include <pthread.h> 
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>

struct valov
{
	int plne; 
	int objem_valova;
	int naplnit;
	int cislo;
};

void* Kobylka (void* params)
{
	struct valov* v = (struct valov*) params;
	int i,j,pockaj;

	j=v->cislo+1;
	while(v->naplnit < 4)
	{
		pockaj=rand() % 6 + 1;
		printf("Kobylka %d sa prechadza .\n",j);
		sleep(pockaj);
		if (v->naplnit < 4){
			printf("Kobylka %d zere...\n",j);
			v->objem_valova -=1;
			if (v->objem_valova < 1){
				printf("Kobylka %d zaerdzala.\n",j);
				v->naplnit +=1;
				v->objem_valova=v->plne;
				printf("\nSpravca naplnitil valov \n\n");
			}
			else{
				sleep(1);
			}
		}
	}
	return NULL;
}

main( int argc, char *argv[] )
{
	int i,pocet_kobyliek,naplnit=0;
	
	struct valov v;
		pocet_kobyliek = 4;
		v.plne = 6;
	pthread_t tid[pocet_kobyliek]; 
	
	srand(time(NULL));  

	v.objem_valova=v.plne;
	v.naplnit=0; 
	
	for ( i = 0; i < pocet_kobyliek; i++){
		v.cislo=i;
		pthread_create (&tid[i], NULL, &Kobylka, &v);
	}
	for ( i = 0; i < pocet_kobyliek; i++)
		pthread_join(tid[1], NULL);
	
	printf(" ze Kobylka beha, spravca oddychuje a uloha je hotova :).\n");
	
	return 0;
}


