From e63ef07b25309a7cbdb7492a8e1f3bf9760f885a Mon Sep 17 00:00:00 2001 From: "remi.greub" <remi.greub@hes-so.ch> Date: Thu, 10 Apr 2025 22:37:29 +0200 Subject: [PATCH] correction de citiess en cities --- G17_bykes/main.c | 106 +++++++++++++++++++++++------------------------ 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/G17_bykes/main.c b/G17_bykes/main.c index 0cf8bcd..8966356 100644 --- a/G17_bykes/main.c +++ b/G17_bykes/main.c @@ -27,7 +27,7 @@ struct civilian{ int nb_trajet; int max_trajets; int i_cities; - int nbcitiess; + int nbcities; int nslotss; }; @@ -35,7 +35,7 @@ struct Truck{ int num_thread; int n_bike; int i_cities; - int nbcitiess; + int nbcities; int nslotss; int nbCivilians; }; @@ -50,7 +50,7 @@ int rand_D(); //void civilians_PassiveMode(void *arg); void *trucks(void *arg); void *civilians(void *arg); -struct cities *citiess; //this table is the size of the number of citiess, each citiess has NParkinglot and each numbers represents a free parkinglot +struct cities *cities; //this table is the size of the number of cities, each cities has NParkinglot and each numbers represents a free parkinglot int main(int argc, char **argv){ @@ -58,38 +58,38 @@ int main(int argc, char **argv){ perror("erreur d'arguments d'entrée\n"); return EXIT_FAILURE; } - int nbcitiess = atoi(argv[1]); //S 10 + int nbcities = atoi(argv[1]); //S 10 int nbCivilians = atoi(argv[2]); //H 100 int nbTrajets = atoi(argv[3]); //M 10 int nbslots = atoi(argv[4]); //N 10 - nbcitiess += 1; + nbcities += 1; srand(0); pthread_t *threadCivilians = malloc(sizeof(pthread_t)*nbCivilians); pthread_t *threadTruck = malloc(sizeof(pthread_t)); - citiess = calloc(nbcitiess, sizeof(struct cities)); + cities = calloc(nbcities, sizeof(struct cities)); struct civilian *Civilians = calloc(nbCivilians, sizeof(struct civilian)); struct Truck *truck = malloc(sizeof(struct Truck)); - for(int j = 0; j<nbcitiess; j++){ - citiess[j].nb_bikesParked = nbslots-2; - citiess[j].nb_P_waiting = 0; + for(int j = 0; j<nbcities; j++){ + cities[j].nb_bikesParked = nbslots-2; + cities[j].nb_P_waiting = 0; } - citiess[DEPOT].nb_bikesParked = 0; + cities[DEPOT].nb_bikesParked = 0; truck->i_cities = 0; truck->n_bike = TRUCK_CAPACITE_TYP; truck->nslotss = nbslots; truck->num_thread = nbCivilians; - truck->nbcitiess = nbcitiess; + truck->nbcities = nbcities; truck->nbCivilians = nbCivilians; - sem_BikeFree = malloc(sizeof(sem_t)*nbcitiess); - sem_FreeSlot = malloc(sizeof(sem_t)*nbcitiess); - mutex = malloc(sizeof(pthread_mutex_t)*nbcitiess); + sem_BikeFree = malloc(sizeof(sem_t)*nbcities); + sem_FreeSlot = malloc(sizeof(sem_t)*nbcities); + mutex = malloc(sizeof(pthread_mutex_t)*nbcities); - for(int x =0; x<nbcitiess; x++){ + for(int x =0; x<nbcities; x++){ sem_init(&sem_BikeFree[x], 0, nbslots-2);//8); sem_init(&sem_FreeSlot[x], 0, nbslots-(nbslots-2));//2); pthread_mutex_init(&mutex[x], NULL); //mutex du truck @@ -104,10 +104,10 @@ int main(int argc, char **argv){ for(int i=0; i<nbCivilians; i++){ Civilians[i].max_trajets = nbTrajets; Civilians[i].nslotss = nbslots; - Civilians[i].nbcitiess = nbcitiess; + Civilians[i].nbcities = nbcities; Civilians[i].num_thread = i; Civilians[i].nb_trajet = 0; - Civilians[i].i_cities = (rand()%(Civilians[i].nbcitiess - 1))+1; + Civilians[i].i_cities = (rand()%(Civilians[i].nbcities - 1))+1; pthread_mutex_init(&mutex[i], NULL); //mutex par civilians if(pthread_create(&threadCivilians[i], NULL, civilians, (void*)&Civilians[i])!=0){ perror("thread creation error"); @@ -129,7 +129,7 @@ int main(int argc, char **argv){ } //free the memory - for(int i=0; i<nbcitiess; i++){ + for(int i=0; i<nbcities; i++){ sem_destroy(&sem_BikeFree[i]); sem_destroy(&sem_FreeSlot[i]); } @@ -144,15 +144,15 @@ int main(int argc, char **argv){ free(mutex); printf("***************** CYCLING TERMINATED ***************\n"); int sum=0; - for(int i=1; i<nbcitiess; i++){ - printf("Terminal %d contains %d bikes\n", i, citiess[i].nb_bikesParked); - sum+=citiess[i].nb_bikesParked; + for(int i=1; i<nbcities; i++){ + printf("Terminal %d contains %d bikes\n", i, cities[i].nb_bikesParked); + sum+=cities[i].nb_bikesParked; } - printf("total number of bikes in town: %d, in depot: %d, in truck: %d, total: %d\n", sum, citiess[DEPOT].nb_bikesParked, truck->n_bike, truck->n_bike+citiess[DEPOT].nb_bikesParked+sum); + printf("total number of bikes in town: %d, in depot: %d, in truck: %d, total: %d\n", sum, cities[DEPOT].nb_bikesParked, truck->n_bike, truck->n_bike+cities[DEPOT].nb_bikesParked+sum); free(Civilians); free(truck); - free(citiess); + free(cities); return EXIT_SUCCESS; } @@ -166,23 +166,23 @@ void *civilians(void *arg){ //if(hab->i_cities==4){ sem_getvalue(&sem_FreeSlot[hab->i_cities],&val); pthread_mutex_lock(&mutex[hab->i_cities]); - printf("(GET) person %d starts from terminal %d (%d bykes, %d persons waiting, semslotsFree_val : %d)\n", hab->num_thread, hab->i_cities, citiess[hab->i_cities].nb_bikesParked, citiess[hab->i_cities].nb_P_waiting, val);//citiess[hab->i_cities].nb_P_waiting); + printf("(GET) person %d starts from terminal %d (%d bykes, %d persons waiting, semslotsFree_val : %d)\n", hab->num_thread, hab->i_cities, cities[hab->i_cities].nb_bikesParked, cities[hab->i_cities].nb_P_waiting, val);//cities[hab->i_cities].nb_P_waiting); pthread_mutex_unlock(&mutex[hab->i_cities]); //} - if(citiess[hab->i_cities].nb_bikesParked<=0){// && hab->i_cities == 4){ - printf("person %d is STUCK at terminal %d: rack empty : %d bikes\n", hab->num_thread, hab->i_cities, citiess[hab->i_cities].nb_bikesParked); + if(cities[hab->i_cities].nb_bikesParked<=0){// && hab->i_cities == 4){ + printf("person %d is STUCK at terminal %d: rack empty : %d bikes\n", hab->num_thread, hab->i_cities, cities[hab->i_cities].nb_bikesParked); } pthread_mutex_lock(&mutex[hab->i_cities]); - citiess[hab->i_cities].nb_P_waiting += 1; + cities[hab->i_cities].nb_P_waiting += 1; pthread_mutex_unlock(&mutex[hab->i_cities]); sem_wait(&sem_BikeFree[hab->i_cities]); pthread_mutex_lock(&mutex[hab->i_cities]); - citiess[hab->i_cities].nb_P_waiting -= 1; - citiess[hab->i_cities].nb_bikesParked -= 1; //critical section + cities[hab->i_cities].nb_P_waiting -= 1; + cities[hab->i_cities].nb_bikesParked -= 1; //critical section //if(hab->i_cities==4){ //printf("person %d leaves terminal %d by bike\n", hab->num_thread, hab->i_cities); //} @@ -193,9 +193,9 @@ void *civilians(void *arg){ //} - //go to place j = rand()%ncitiess and j != i + //go to place j = rand()%ncities and j != i do{ - j = (rand()%(hab->nbcitiess - 1))+1; + j = (rand()%(hab->nbcities - 1))+1; }while(j==hab->i_cities); #if USLEEP usleep(rand_D()); @@ -205,25 +205,25 @@ void *civilians(void *arg){ //if(j==4){ sem_getvalue(&sem_BikeFree[j],&val); pthread_mutex_lock(&mutex[j]); - printf("(PUT) person %d arrives at terminal %d (%d bykes, %d persons waiting, semBikeFree_val : %d)\n", hab->num_thread, j, citiess[j].nb_bikesParked, citiess[j].nb_P_waiting, val);//citiess[j].nb_P_waiting); + printf("(PUT) person %d arrives at terminal %d (%d bykes, %d persons waiting, semBikeFree_val : %d)\n", hab->num_thread, j, cities[j].nb_bikesParked, cities[j].nb_P_waiting, val);//cities[j].nb_P_waiting); pthread_mutex_unlock(&mutex[j]); //} - if(citiess[j].nb_bikesParked>=hab->nslotss){//} && j == 4){ - printf("person %d is STUCK at terminal %d: rack full : %d bikes\n", hab->num_thread, j, citiess[j].nb_bikesParked); + if(cities[j].nb_bikesParked>=hab->nslotss){//} && j == 4){ + printf("person %d is STUCK at terminal %d: rack full : %d bikes\n", hab->num_thread, j, cities[j].nb_bikesParked); } pthread_mutex_lock(&mutex[j]); - citiess[j].nb_P_waiting += 1; + cities[j].nb_P_waiting += 1; pthread_mutex_unlock(&mutex[j]); sem_wait(&sem_FreeSlot[j]); pthread_mutex_lock(&mutex[j]); //deposit his bycycle - citiess[j].nb_P_waiting -= 1; - citiess[j].nb_bikesParked += 1; //critical section + cities[j].nb_P_waiting -= 1; + cities[j].nb_bikesParked += 1; //critical section pthread_mutex_unlock(&mutex[j]); sem_post(&sem_BikeFree[j]); //if(j==4){ @@ -253,55 +253,55 @@ void *trucks(void *arg){ int tmp_nbBikes; while(personsFinished < truck->nbCivilians){ - //1 : for each citiess from 1 to S (0 is the depot) - for(int i=1; i<truck->nbcitiess; i++){ + //1 : for each cities from 1 to S (0 is the depot) + for(int i=1; i<truck->nbcities; i++){ //spreads the bikes evenly //too many bikes in this cities tmp_nbBikes = truck->n_bike; - if(citiess[i].nb_bikesParked > (truck->nslotss-2) && truck->n_bike < TRUCK_CAPACITE_MAX){ - while(citiess[i].nb_bikesParked > (truck->nslotss-2) && truck->n_bike < TRUCK_CAPACITE_MAX){ + if(cities[i].nb_bikesParked > (truck->nslotss-2) && truck->n_bike < TRUCK_CAPACITE_MAX){ + while(cities[i].nb_bikesParked > (truck->nslotss-2) && truck->n_bike < TRUCK_CAPACITE_MAX){ sem_wait(&sem_BikeFree[i]); pthread_mutex_lock(&mutex[i]); truck->n_bike += 1; - citiess[i].nb_bikesParked -= 1; + cities[i].nb_bikesParked -= 1; pthread_mutex_unlock(&mutex[i]); sem_post(&sem_FreeSlot[i]); } pthread_mutex_lock(&mutex[i]); - printf("truck removes %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", truck->n_bike-tmp_nbBikes, i, citiess[i].nb_bikesParked, citiess[i].nb_P_waiting, truck->n_bike); + printf("truck removes %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", truck->n_bike-tmp_nbBikes, i, cities[i].nb_bikesParked, cities[i].nb_P_waiting, truck->n_bike); pthread_mutex_unlock(&mutex[i]); } // not enough bikes in this cities // until he gets at least 2 bikes (or the truck is empty) - else if(citiess[i].nb_bikesParked < CITY_CAPACITY_MIN && truck->n_bike > 0){ + else if(cities[i].nb_bikesParked < CITY_CAPACITY_MIN && truck->n_bike > 0){ tmp_nbBikes = truck->n_bike; - while(citiess[i].nb_bikesParked < CITY_CAPACITY_MIN && truck->n_bike > 0){ + while(cities[i].nb_bikesParked < CITY_CAPACITY_MIN && truck->n_bike > 0){ sem_wait(&sem_FreeSlot[i]); pthread_mutex_lock(&mutex[i]); truck->n_bike -= 1; - citiess[i].nb_bikesParked += 1; + cities[i].nb_bikesParked += 1; pthread_mutex_unlock(&mutex[i]); sem_post(&sem_BikeFree[i]); } pthread_mutex_lock(&mutex[i]); - printf("truck adds %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", tmp_nbBikes-truck->n_bike, i, citiess[i].nb_bikesParked, citiess[i].nb_P_waiting, truck->n_bike); + printf("truck adds %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", tmp_nbBikes-truck->n_bike, i, cities[i].nb_bikesParked, cities[i].nb_P_waiting, truck->n_bike); pthread_mutex_unlock(&mutex[i]); } } //2: goes to the depot to rebalance the truck's content to 2 bycycles tmp_nbBikes = truck->n_bike; if(truck->n_bike < TRUCK_CAPACITE_TYP){ - if(citiess[DEPOT].nb_bikesParked > 0){ - while(truck->n_bike < TRUCK_CAPACITE_TYP && citiess[DEPOT].nb_bikesParked > 0){ + if(cities[DEPOT].nb_bikesParked > 0){ + while(truck->n_bike < TRUCK_CAPACITE_TYP && cities[DEPOT].nb_bikesParked > 0){ truck->n_bike += 1; pthread_mutex_lock(&mutex[DEPOT]); - citiess[DEPOT].nb_bikesParked -= 1; + cities[DEPOT].nb_bikesParked -= 1; pthread_mutex_unlock(&mutex[DEPOT]); } pthread_mutex_lock(&mutex[DEPOT]); - printf("(DEPOT) truck gets %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", truck->n_bike-tmp_nbBikes, DEPOT, citiess[DEPOT].nb_bikesParked, citiess[DEPOT].nb_P_waiting, truck->n_bike); + printf("(DEPOT) truck gets %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", truck->n_bike-tmp_nbBikes, DEPOT, cities[DEPOT].nb_bikesParked, cities[DEPOT].nb_P_waiting, truck->n_bike); pthread_mutex_unlock(&mutex[DEPOT]); } } @@ -309,11 +309,11 @@ void *trucks(void *arg){ while(truck->n_bike > TRUCK_CAPACITE_TYP){ truck->n_bike -= 1; pthread_mutex_lock(&mutex[DEPOT]); - citiess[DEPOT].nb_bikesParked += 1; + cities[DEPOT].nb_bikesParked += 1; pthread_mutex_unlock(&mutex[DEPOT]); } pthread_mutex_lock(&mutex[DEPOT]); - printf("(DEPOT) truck deposit %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", tmp_nbBikes-truck->n_bike, DEPOT, citiess[DEPOT].nb_bikesParked, citiess[DEPOT].nb_P_waiting, truck->n_bike); + printf("(DEPOT) truck deposit %d bikes at terminal %d (%d bikes, %d persons waiting, %d left in truck)\n", tmp_nbBikes-truck->n_bike, DEPOT, cities[DEPOT].nb_bikesParked, cities[DEPOT].nb_P_waiting, truck->n_bike); pthread_mutex_unlock(&mutex[DEPOT]); } //3: pause betweem 100us up to 199us -- GitLab