From d82ec91d0510153881fbb994de3c0d95e9e1f096 Mon Sep 17 00:00:00 2001 From: Lou Davila <lou.davilapr@hes-so.ch> Date: Wed, 9 Apr 2025 15:20:41 +0200 Subject: [PATCH] Updated code --- tp | Bin 21368 -> 21328 bytes tp.c | 175 ++++++++++++++++++++++++++++++++++------------------------- 2 files changed, 102 insertions(+), 73 deletions(-) diff --git a/tp b/tp index 71dc93f44ff8a634719c3edfc55ed4c9ad7a661c..11586c6855566ccba201f878ee9431e295a73610 100755 GIT binary patch delta 3542 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 delta 3676 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 M7lbD@xzJZ00JPS@3jhEB diff --git a/tp.c b/tp.c index 9b9366a..b37678f 100644 --- a/tp.c +++ b/tp.c @@ -7,7 +7,8 @@ #define CAMION_CAPACITE 4 -typedef struct { +typedef struct +{ sem_t velos; sem_t bornes; int velos_dispo; @@ -15,29 +16,33 @@ typedef struct { pthread_mutex_t mutex; } Site; -int SITES, HABITANTS, TRAJETS, BORNES; +int SITES,HABITANTS,TRAJETS,BORNES; Site *sites; pthread_mutex_t mutex_trajets = PTHREAD_MUTEX_INITIALIZER; int trajets_effectues = 0; int velos_depot = 0; pthread_mutex_t mutex_velos_depot = PTHREAD_MUTEX_INITIALIZER; -void *habitant(void *arg) { - int id = *(int *)arg; - int site_actuel = rand() % SITES; +void *habitant(void *arg) +{ + int habitant_id = *(int *)arg; + int site_actuel = rand()%SITES; free(arg); - for (int i = 0; i < TRAJETS; i++) { + for (int i = 0; i < TRAJETS; i++) + { int site_suivant; - do { - site_suivant = rand() % SITES; - } while (site_suivant == site_actuel); + do + { + site_suivant = rand()%SITES; + } + while (site_suivant == site_actuel); pthread_mutex_lock(&sites[site_actuel].mutex); sites[site_actuel].personnes_attente++; pthread_mutex_unlock(&sites[site_actuel].mutex); - printf("(GET) Habitant %d attend un vélo au site %d\n", id, site_actuel); + printf("(GET) Habitant %d attend un vélo au site %d\n",habitant_id,site_actuel); sem_wait(&sites[site_actuel].velos); pthread_mutex_lock(&sites[site_actuel].mutex); @@ -45,15 +50,15 @@ void *habitant(void *arg) { sites[site_actuel].personnes_attente--; pthread_mutex_unlock(&sites[site_actuel].mutex); - printf("(GET) Habitant %d prend un vélo au site %d\n", id, site_actuel); + printf("(GET) Habitant %d prend un vélo au site %d\n",habitant_id,site_actuel); sem_post(&sites[site_actuel].bornes); - //usleep((rand() % 1000 + 1000)); + //usleep((rand()%1000+1000)); pthread_mutex_lock(&sites[site_suivant].mutex); sites[site_suivant].personnes_attente++; pthread_mutex_unlock(&sites[site_suivant].mutex); - printf("(PUT) Habitant %d attend d'avoir accès à une borne du site %d\n", id, site_suivant); + printf("(PUT) Habitant %d attend d'avoir accès à une borne du site %d\n",habitant_id,site_suivant); sem_wait(&sites[site_suivant].bornes); pthread_mutex_lock(&sites[site_suivant].mutex); @@ -62,8 +67,8 @@ void *habitant(void *arg) { pthread_mutex_unlock(&sites[site_suivant].mutex); sem_post(&sites[site_suivant].velos); - printf("(PUT) Habitant %d dépose un vélo au site %d\n", id, site_suivant); - //usleep((rand() % 1000 + 1000)); + printf("(PUT) Habitant %d dépose un vélo au site %d\n",habitant_id,site_suivant); + //usleep((rand()%1000+1000)); site_actuel = site_suivant; @@ -74,89 +79,109 @@ void *habitant(void *arg) { return NULL; } -void *gestion_camion(void *arg) { +void *gestion_camion(void *arg) +{ int velos_camion = 2; - while (1) { + while (1) + { pthread_mutex_lock(&mutex_trajets); - if (trajets_effectues >= HABITANTS * TRAJETS) { + if (trajets_effectues >= HABITANTS*TRAJETS) + { pthread_mutex_unlock(&mutex_trajets); printf("Camion arrête son travail, tous les trajets sont effectués.\n"); break; } pthread_mutex_unlock(&mutex_trajets); - for (int i = 0; i < SITES; i++) { + for (int i = 0; i < SITES; i++) + { pthread_mutex_lock(&sites[i].mutex); - // Fixed truck logic - ensure atomic operations with proper locking - if (sites[i].velos_dispo > BORNES - 2 && velos_camion < CAMION_CAPACITE) { - int aRetirer = sites[i].velos_dispo - (BORNES - 2); - if (aRetirer > CAMION_CAPACITE - velos_camion) - aRetirer = CAMION_CAPACITE - velos_camion; + if (CAMION_CAPACITE > velos_camion && sites[i].velos_dispo > BORNES-2) + { + int aRetirer = sites[i].velos_dispo-(BORNES-2); + if (CAMION_CAPACITE-velos_camion < aRetirer) + { + aRetirer = CAMION_CAPACITE-velos_camion; + } - // Ensure we don't remove too many bikes - if (aRetirer > sites[i].velos_dispo-1) + if (sites[i].velos_dispo-1 < aRetirer) + { aRetirer = sites[i].velos_dispo-1; + } - for (int j = 0; j < aRetirer; j++) { + for (int j = 0; j < aRetirer; j++) + { sem_wait(&sites[i].velos); sites[i].velos_dispo--; velos_camion++; sem_post(&sites[i].bornes); } - printf("Camion prend des vélos au site %d (Vélos dans camion: %d)\n", i, velos_camion); + printf("Camion prend des vélos au site %d (Vélos dans camion: %d)\n",i,velos_camion); } - else if (sites[i].velos_dispo < 2 && velos_camion > 0) { - int bikes_to_add = 2 - sites[i].velos_dispo; - if (bikes_to_add > velos_camion) - bikes_to_add = velos_camion; + else if (sites[i].velos_dispo < 2 && velos_camion > 0) + { + int aAjouter = 2-sites[i].velos_dispo; + if (aAjouter > velos_camion) + { + aAjouter = velos_camion; + } - int available_slots = BORNES - sites[i].velos_dispo; - if (bikes_to_add > available_slots) - bikes_to_add = available_slots; + int spotsDisponibles = BORNES-sites[i].velos_dispo; + if (aAjouter > spotsDisponibles) + { + aAjouter = spotsDisponibles; + } - for (int j = 0; j < bikes_to_add; j++) { + for (int j = 0; j < aAjouter; j++) + { sem_wait(&sites[i].bornes); sites[i].velos_dispo++; velos_camion--; sem_post(&sites[i].velos); } - printf("Camion dépose des vélos au site %d (Vélos dans camion: %d)\n", i, velos_camion); + printf("Camion dépose des vélos au site %d (Vélos dans camion: %d)\n",i,velos_camion); } pthread_mutex_unlock(&sites[i].mutex); - usleep((rand() % 100 + 100)); + //usleep((rand()%100+100)); } pthread_mutex_lock(&mutex_velos_depot); - if (velos_camion > 2) { - velos_depot += (velos_camion - 2); + if (velos_camion > 2) + { + velos_depot+= (velos_camion-2); velos_camion = 2; - printf("Camion vide les vélos au dépôt (Vélos en dépôt: %d)\n", velos_depot); - } else if (velos_camion < 2 && velos_depot > 0) { - int needed = 2 - velos_camion; - if (needed > velos_depot) - needed = velos_depot; - velos_depot -= needed; - velos_camion += needed; - printf("Camion prend des vélos du dépôt (Vélos en dépôt: %d)\n", velos_depot); + printf("Camion vide les vélos au dépôt (Vélos en dépôt: %d)\n",velos_depot); + } + else if (velos_depot > 0 && velos_camion < 2) + { + int requis = 2-velos_camion; + if (requis > velos_depot) + { + requis = velos_depot; + } + velos_depot-= requis; + velos_camion+= requis; + printf("Camion prend des vélos du dépôt (Vélos en dépôt: %d)\n",velos_depot); } pthread_mutex_unlock(&mutex_velos_depot); - printf("Camion fait un tour, vélos restants: %d, vélos en dépôt: %d\n", velos_camion, velos_depot); - usleep((rand() % 100 + 100)); + printf("Camion fait un tour, vélos restants: %d, vélos en dépôt: %d\n",velos_camion,velos_depot); + //usleep((rand()%100+100)); } return NULL; } -int main(int argc, char *argv[]) { - if (argc != 5) { - fprintf(stderr, "Usage: %s <SITES> <HABITANTS> <TRAJETS> <BORNES>\n", argv[0]); +int main(int argc, char *argv[]) +{ + if (argc != 5) + { + fprintf(stderr, "Usage: %s <SITES> <HABITANTS> <TRAJETS> <BORNES>\n",argv[0]); return 1; } - SITES = atoi(argv[1]); HABITANTS = atoi(argv[2]); TRAJETS = atoi(argv[3]); @@ -165,38 +190,42 @@ int main(int argc, char *argv[]) { srand(time(NULL)); sites = malloc(SITES * sizeof(Site)); - pthread_t habitants[HABITANTS], camion; + pthread_t habitants[HABITANTS],camion; - for (int i = 0; i < SITES; i++) { - sem_init(&sites[i].velos, 0, BORNES - 2); - sem_init(&sites[i].bornes, 0, 2); + for (int i = 0; i < SITES; i++) + { + sem_init(&sites[i].velos,0,BORNES-2); + sem_init(&sites[i].bornes,0,2); pthread_mutex_init(&sites[i].mutex, NULL); - sites[i].velos_dispo = BORNES - 2; + sites[i].velos_dispo = BORNES-2; sites[i].personnes_attente = 0; } - - for (int i = 0; i < HABITANTS; i++) { - int *id = malloc(sizeof(int)); - *id = i; - pthread_create(&habitants[i], NULL, habitant, id); + for (int i = 0; i < HABITANTS; i++) + { + int *habitant_id = malloc(sizeof(int)); + *habitant_id = i; + pthread_create(&habitants[i],NULL,habitant,habitant_id); } - pthread_create(&camion, NULL, gestion_camion, NULL); + pthread_create(&camion,NULL,gestion_camion,NULL); - for (int i = 0; i < HABITANTS; i++) { - pthread_join(habitants[i], NULL); + for (int i = 0; i < HABITANTS; i++) + { + pthread_join(habitants[i],NULL); } - pthread_join(camion, NULL); + pthread_join(camion,NULL); int total_velos = velos_depot; - for (int i = 0; i < SITES; i++) { - total_velos += sites[i].velos_dispo; - printf("Site %d contains %d bykes\n", i, sites[i].velos_dispo); + for (int i = 0; i < SITES; i++) + { + total_velos+= sites[i].velos_dispo; + printf("Site %d contains %d bykes\n",i,sites[i].velos_dispo); } total_velos+= 2; - printf("Nombre total de vélos à la fin : %d (doit être %d)\n", total_velos, SITES * (BORNES - 2) + 2); + printf("Nombre total de vélos à la fin : %d (doit être %d)\n",total_velos,SITES*(BORNES-2)+2); printf("Simulation terminée.\n"); - for (int i = 0; i < SITES; i++) { + for (int i = 0; i < SITES; i++) + { sem_destroy(&sites[i].velos); sem_destroy(&sites[i].bornes); pthread_mutex_destroy(&sites[i].mutex); -- GitLab