From d145f55a7ec5dbf874dc5bee44ab7c8d244bc312 Mon Sep 17 00:00:00 2001 From: "remi.greub" <remi.greub@hes-so.ch> Date: Fri, 11 Apr 2025 03:02:19 +0200 Subject: [PATCH] =?UTF-8?q?V1=20dans=20repertoire=20s=C3=A9par=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bykes_V1/.vscode/settings.json | 5 + bykes_V1/Makefile | 14 ++ bykes_V1/bykes | Bin 0 -> 179344 bytes bykes_V1/main.c | 334 +++++++++++++++++++++++++++++++++ 4 files changed, 353 insertions(+) create mode 100644 bykes_V1/.vscode/settings.json create mode 100644 bykes_V1/Makefile create mode 100755 bykes_V1/bykes create mode 100644 bykes_V1/main.c diff --git a/bykes_V1/.vscode/settings.json b/bykes_V1/.vscode/settings.json new file mode 100644 index 0000000..5a51a28 --- /dev/null +++ b/bykes_V1/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "threads.h": "c" + } +} \ No newline at end of file diff --git a/bykes_V1/Makefile b/bykes_V1/Makefile new file mode 100644 index 0000000..a12c3ef --- /dev/null +++ b/bykes_V1/Makefile @@ -0,0 +1,14 @@ +CC:=gcc +CFLAGS:=-Wall -Wextra -pedantic -g -fsanitize=address,undefined -fsanitize-recover=address +LDFLAGS:=-lpthread -lm +EXEC:=bykes +ARGS:=10 100 10 10 + +$(EXEC): main.c + $(CC) $(CFLAGS) $^ -o $(EXEC) $(LDFLAGS) + +clean: + rm -rf *.o $(EXEC) + +run: $(EXEC) + ./$< $(ARGS) diff --git a/bykes_V1/bykes b/bykes_V1/bykes new file mode 100755 index 0000000000000000000000000000000000000000..9f035935639bf51f30aa1418f357398ca1239910 GIT binary patch literal 179344 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 UF%5J`Ap-+LCCs5vaWpOi05O=?fB*mh literal 0 HcmV?d00001 diff --git a/bykes_V1/main.c b/bykes_V1/main.c new file mode 100644 index 0000000..359d1c6 --- /dev/null +++ b/bykes_V1/main.c @@ -0,0 +1,334 @@ +#include <stdio.h> +#include <stdbool.h> +#include <stdint.h> +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> +#include <time.h> +#include <semaphore.h> + +#define TRUCK_CAPACITE_MAX 4 +#define TRUCK_CAPACITE_TYP 2 +#define CITY_CAPACITY_MIN 2 + +#define DEPOT 0 + +#define USLEEP 1 + +sem_t *sem_FreeSlot; +sem_t *sem_BikeFree; +pthread_mutex_t *mutex; +pthread_barrier_t b; + +int personsFinished=0; + +struct person{ + int num_thread; + int nb_travels; + int max_travels; + int i_terminals; + int nbterminals; + int nslots; +}; + +struct Truck{ + int num_thread; + int n_bike; + int i_terminals; + int nbterminals; + int nslots; + int nbpersons; +}; + +struct city{ + int nb_bikesParked; + int nb_P_waiting; +}; + +int rand_Dc(); +int rand_D(); +//void persons_PassiveMode(void *arg); +void *trucks(void *arg); +void *Persons(void *arg); +struct city *terminals; //this table is the size of the number of terminals, each terminals has NParkinglot and each numbers represents a free parkinglot + + +int main(int argc, char **argv){ + if (argc < 5 || argc > 5){ + perror("erreur d'arguments d'entrée\n"); + return EXIT_FAILURE; + } + int nbterminals = atoi(argv[1]); //S 10 + int nbpersons = atoi(argv[2]); //H 100 + int nbtravels = atoi(argv[3]); //M 10 + int nbslots = atoi(argv[4]); //N 10 + nbterminals += 1; + srand(0); + + + pthread_t *threadpersons = malloc(sizeof(pthread_t)*nbpersons); + pthread_t *threadTruck = malloc(sizeof(pthread_t)); + terminals = calloc(nbterminals, sizeof(struct city)); + struct person *persons = calloc(nbpersons, sizeof(struct person)); + struct Truck *truck = malloc(sizeof(struct Truck)); + + for(int j = 0; j<nbterminals; j++){ + terminals[j].nb_bikesParked = nbslots-2; + terminals[j].nb_P_waiting = 0; + } + terminals[DEPOT].nb_bikesParked = 0; + + truck->i_terminals = 0; + truck->n_bike = TRUCK_CAPACITE_TYP; + truck->nslots = nbslots; + truck->num_thread = nbpersons; + truck->nbterminals = nbterminals; + truck->nbpersons = nbpersons; + + sem_BikeFree = malloc(sizeof(sem_t)*nbterminals); + sem_FreeSlot = malloc(sizeof(sem_t)*nbterminals); + mutex = malloc(sizeof(pthread_mutex_t)*nbterminals); + + for(int x =0; x<nbterminals; 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 + } + + pthread_barrier_init(&b, NULL, nbpersons); + + if(pthread_create(threadTruck, NULL, trucks, (void*)truck)!=0){ + perror("thread creation error"); + return EXIT_FAILURE; + } + for(int i=0; i<nbpersons; i++){ + persons[i].max_travels = nbtravels; + persons[i].nslots = nbslots; + persons[i].nbterminals = nbterminals; + persons[i].num_thread = i; + persons[i].nb_travels = 0; + persons[i].i_terminals = (rand()%(persons[i].nbterminals - 1))+1; + if(pthread_create(&threadpersons[i], NULL, Persons, (void*)&persons[i])!=0){ + perror("thread creation error"); + return EXIT_FAILURE; + } + } + + //pthread_barrier_wait(&b); + if(pthread_join(*threadTruck, NULL)){ + perror("thread join error"); + return EXIT_FAILURE; + } + //thread join + for(int i=0; i<nbpersons; i++){ + if(pthread_join(threadpersons[i], NULL)){ + perror("thread join error"); + return EXIT_FAILURE; + } + } + + + printf("***************** CYCLING TERMINATED ***************\n"); + int sum=0; + for(int i=1; i<nbterminals; i++){ + printf("Terminal %d contains %d bikes\n", i, terminals[i].nb_bikesParked); + sum+=terminals[i].nb_bikesParked; + } + printf("total number of bikes in town: %d, in depot: %d, in truck: %d, total: %d\n", sum, terminals[DEPOT].nb_bikesParked, truck->n_bike, truck->n_bike+terminals[DEPOT].nb_bikesParked+sum); + + + //free the memory + for(int i=0; i<nbterminals; i++){ + sem_destroy(&sem_BikeFree[i]); + sem_destroy(&sem_FreeSlot[i]); + pthread_mutex_destroy(&mutex[i]); + } + pthread_barrier_destroy(&b); + free(threadpersons); + free(threadTruck); + free(sem_BikeFree); + free(sem_FreeSlot); + free(mutex); + free(persons); + free(truck); + free(terminals); + return EXIT_SUCCESS; +} + +void *Persons(void *arg){ + struct person *hab = (struct person*)arg; + int j=0; + int val; + // inside a Mtravels loop for each persons + while(hab->nb_travels < hab->max_travels){ + //waits for a bike in terminals i + //if(hab->i_terminals==4){ + sem_getvalue(&sem_FreeSlot[hab->i_terminals],&val); + pthread_mutex_lock(&mutex[hab->i_terminals]); + printf("(GET) person %d starts from terminal %d (%d bykes, %d persons waiting, semslotsFree_val : %d)\n", hab->num_thread, hab->i_terminals, terminals[hab->i_terminals].nb_bikesParked, terminals[hab->i_terminals].nb_P_waiting, val);//terminals[hab->i_terminals].nb_P_waiting); + pthread_mutex_unlock(&mutex[hab->i_terminals]); + //} + + if(terminals[hab->i_terminals].nb_bikesParked<=0){// && hab->i_terminals == 4){ + printf("person %d is STUCK at terminal %d: rack empty : %d bikes\n", hab->num_thread, hab->i_terminals, terminals[hab->i_terminals].nb_bikesParked); + } + + pthread_mutex_lock(&mutex[hab->i_terminals]); + terminals[hab->i_terminals].nb_P_waiting += 1; + pthread_mutex_unlock(&mutex[hab->i_terminals]); + + + sem_wait(&sem_BikeFree[hab->i_terminals]); + pthread_mutex_lock(&mutex[hab->i_terminals]); + terminals[hab->i_terminals].nb_P_waiting -= 1; + terminals[hab->i_terminals].nb_bikesParked -= 1; //critical section + //if(hab->i_terminals==4){ + //printf("person %d leaves terminal %d by bike\n", hab->num_thread, hab->i_terminals); + //} + pthread_mutex_unlock(&mutex[hab->i_terminals]); + sem_post(&sem_FreeSlot[hab->i_terminals]); + //if(hab->i_terminals==4){ + printf("person %d leaves terminal %d by bike\n", hab->num_thread, hab->i_terminals); + //} + + + //go to place j = rand()%nterminals and j != i + do{ + j = (rand()%(hab->nbterminals - 1))+1; + }while(j==hab->i_terminals); +#if USLEEP + usleep(rand_D()); +#endif + + //waits for a parkinglot to be freed and deposit his bycycle + //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, terminals[j].nb_bikesParked, terminals[j].nb_P_waiting, val);//terminals[j].nb_P_waiting); + pthread_mutex_unlock(&mutex[j]); + //} + + + if(terminals[j].nb_bikesParked>=hab->nslots){//} && j == 4){ + printf("person %d is STUCK at terminal %d: rack full : %d bikes\n", hab->num_thread, j, terminals[j].nb_bikesParked); + } + + pthread_mutex_lock(&mutex[j]); + terminals[j].nb_P_waiting += 1; + pthread_mutex_unlock(&mutex[j]); + + + sem_wait(&sem_FreeSlot[j]); + pthread_mutex_lock(&mutex[j]); + //deposit his bycycle + terminals[j].nb_P_waiting -= 1; + terminals[j].nb_bikesParked += 1; //critical section + pthread_mutex_unlock(&mutex[j]); + sem_post(&sem_BikeFree[j]); + //if(j==4){ + printf("person %d leaves terminal %d by foot\n", hab->num_thread, j); + //} + + //does whatever he has to do for a D delay time (waits for rand() 1000->1999us) +#if USLEEP + usleep(rand_D()); +#endif + //changes his position from terminals i = j (j is the new terminals) + hab->i_terminals = j; + hab->nb_travels += 1; + } + printf("person %d stops\n", hab->num_thread); + pthread_mutex_lock(&mutex[hab->i_terminals]); + personsFinished += 1; + pthread_mutex_unlock(&mutex[hab->i_terminals]); + pthread_barrier_wait(&b); + //printf("machin bidule a passé la barriere !!!! : %d, tot_travels = %d\n", hab->num_thread, hab->nb_travels); + + return NULL; +} + +void *trucks(void *arg){ + struct Truck *truck = (struct Truck*)arg; + int tmp_nbBikes; + + while(personsFinished < truck->nbpersons){ + //1 : for each terminals from 1 to S (0 is the depot) + for(int i=1; i<truck->nbterminals; i++){ + //spreads the bikes evenly + //too many bikes in this terminals + tmp_nbBikes = truck->n_bike; + if(terminals[i].nb_bikesParked > (truck->nslots-2) && truck->n_bike < TRUCK_CAPACITE_MAX){ + while(terminals[i].nb_bikesParked > (truck->nslots-2) && truck->n_bike < TRUCK_CAPACITE_MAX){ + sem_wait(&sem_BikeFree[i]); + pthread_mutex_lock(&mutex[i]); + truck->n_bike += 1; + terminals[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, terminals[i].nb_bikesParked, terminals[i].nb_P_waiting, truck->n_bike); + pthread_mutex_unlock(&mutex[i]); + } + // not enough bikes in this terminals + // until he gets at least 2 bikes (or the truck is empty) + else if(terminals[i].nb_bikesParked < CITY_CAPACITY_MIN && truck->n_bike > 0){ + tmp_nbBikes = truck->n_bike; + while(terminals[i].nb_bikesParked < CITY_CAPACITY_MIN && truck->n_bike > 0){ + sem_wait(&sem_FreeSlot[i]); + pthread_mutex_lock(&mutex[i]); + truck->n_bike -= 1; + terminals[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, terminals[i].nb_bikesParked, terminals[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(terminals[DEPOT].nb_bikesParked > 0){ + while(truck->n_bike < TRUCK_CAPACITE_TYP && terminals[DEPOT].nb_bikesParked > 0){ + truck->n_bike += 1; + pthread_mutex_lock(&mutex[DEPOT]); + terminals[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, terminals[DEPOT].nb_bikesParked, terminals[DEPOT].nb_P_waiting, truck->n_bike); + pthread_mutex_unlock(&mutex[DEPOT]); + } + } + else if (truck->n_bike > TRUCK_CAPACITE_TYP){ + while(truck->n_bike > TRUCK_CAPACITE_TYP){ + truck->n_bike -= 1; + pthread_mutex_lock(&mutex[DEPOT]); + terminals[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, terminals[DEPOT].nb_bikesParked, terminals[DEPOT].nb_P_waiting, truck->n_bike); + pthread_mutex_unlock(&mutex[DEPOT]); + } + //3: pause betweem 100us up to 199us +#if USLEEP + usleep(rand_Dc()); +#endif + //printf("TRUCK new loop, person's threads finished: %d\n", personsFinished); + } + printf("TRUCK end loop\n"); + return NULL; +} + +int rand_D(){ + return (rand()%999)+1000; +} + +int rand_Dc(){ + return (rand()%99)+100; +} \ No newline at end of file -- GitLab