From 610c6caa0c6e6091e79dfba1114090dc387d88d4 Mon Sep 17 00:00:00 2001 From: Tom Moguljak Date: Thu, 12 Oct 2023 22:46:12 +0200 Subject: [PATCH] Ajout de l'exo 1 TP6 --- README.md | 10 ++++++++++ TP6/Exo1/ex1.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 TP6/Exo1/ex1.c diff --git a/README.md b/README.md index 41d5d17..c0c6020 100644 --- a/README.md +++ b/README.md @@ -599,6 +599,16 @@ int main(int argc, char *argv[]) ## Exercice 1 +1. Est-ce que l’exécution de ce programme est correcte? Vous pouvez vous en assurer en l’exécutant plusieurs fois. + +> L’exécution de ce programme n’est pas correcte car quand nous exécutons le programme on retrouve plusieurs des threads qui affichent la même valeur de `i`. + +2. Si vous pensez (et avez constaté) que ce n’est pas le cas, expliquez pourquoi. + +> Car il y a une variable `i` qui est partagée entre les threads et qui est modifié par le thread principal en même temps que les autres threads lisent la variable `i`. + +3. Modifiez le code pour qu’il donne le résultat attendu. + ## Exercice 2 ## Exercice 3 diff --git a/TP6/Exo1/ex1.c b/TP6/Exo1/ex1.c new file mode 100644 index 0000000..d674c61 --- /dev/null +++ b/TP6/Exo1/ex1.c @@ -0,0 +1,31 @@ +#include +#include +#include +#include + +#define NUM_THREADS 16 + +void *thread(void *thread_id) +{ + int id = *((int *)thread_id); + printf("Hello from thread %d\n", id); + + return NULL; +} + +int main(int argc, char *argv[]) +{ + pthread_t threads[NUM_THREADS]; + int th[NUM_THREADS]; + + for (int i = 0; i < NUM_THREADS; i++) + { + th[i] = i; + assert(pthread_create(&threads[i], NULL, thread, &th[i]) == 0); + } + + for (int i = 0; i < NUM_THREADS; i++) + assert(pthread_join(threads[i], NULL) == 0); + + return EXIT_SUCCESS; +}