/* ========================================================================== */ /* */ /* MAIN.CPP */ /* JAN DVORAK z VOZEROVIC */ /* */ /* ========================================================================== */ #define RYCHLOST_SIMULACE 100000 //argument usleep() ve vláknu hodin #define MAX_POCET_LETU 150 #include #include #include #include #include #include #include #include "struktury.cpp" #include "hlavicky.h" /******************************************************************************/ int systemovyCas=0; int pocetLetist=0; int pocetLetu=0; int pocetPasazeru=0; pthread_mutex_t zapsaniNaLet; sem_t zamknutiVytvareniLetist; sem_t zamknutiVytvareniLetu; sem_t zamknutiVytvareniPasazeru; sem_t zamknutiVytvareniStruktur; bool KONEC_VSTUPU=false; bool KONEC_APLIKACE=false; struct Letiste *seznamLetist=NULL; struct Let *seznamLetu=NULL; struct Pasazer *seznamPasazeru=NULL; pthread_t *vlaknaLetist; pthread_t *vlaknaPasazeru; pthread_cond_t *condPasazeru; //nástup do letadla pthread_mutex_t *mutexPasazeru; // - povoluje vlákno letu pthread_t *vlaknaLetu; sem_t *zamkyLetu; //povolení od letiště pthread_barrier_t *barieryLetu; //počkání na pasažéry letu pthread_t hodiny; /******************************************************************************/ #include "hodiny.cpp" #include "pasazer.cpp" #include "let.cpp" #include "letiste.cpp" #include "funkce.cpp" /******************************************************************************/ int main(int argv, char*argc[]) { printf("/*******************************************\\\n"); printf("| SIMULACE LETOVEHO PROVOZU: |\n"); printf("| (naprogramoval Jan Dvorak - dvoraj19@fel) | \n"); printf("\\*******************************************/\n\n"); alokujSynchronizacniPrvky(); //hodiny pthread_create(&hodiny, NULL, systemoveHodiny,(void*)RYCHLOST_SIMULACE); //zámky - inicializace semaforů a mutexu sem_init(&zamknutiVytvareniLetist,0,1); sem_init(&zamknutiVytvareniLetu,0,1); sem_init(&zamknutiVytvareniPasazeru,0,1); pthread_mutex_init(&zapsaniNaLet,NULL); sem_init(&zamknutiVytvareniStruktur,0,1); // char radek[100]; while(!feof(stdin)) { nactiRadek(radek); if(radek[0]!='\0') { vyhodnotRadek(radek); } usleep(1); // - slouží pro testování zpoždění z klávesnice } //až všechna vlákna dočtou, nastavíme konec vstupu sem_wait(&zamknutiVytvareniStruktur); sem_wait(&zamknutiVytvareniLetist); sem_wait(&zamknutiVytvareniLetu); sem_wait(&zamknutiVytvareniPasazeru); KONEC_VSTUPU=true; sem_post(&zamknutiVytvareniLetist); sem_post(&zamknutiVytvareniLetu); sem_post(&zamknutiVytvareniPasazeru); sem_post(&zamknutiVytvareniStruktur); int i; //sloučení vláken pasažerů for(i=0;i