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