Ajout de l'exo 1 TP6

This commit is contained in:
Tom MOGULJAK 2023-10-12 22:46:12 +02:00
parent 4abefd45fa
commit 610c6caa0c
2 changed files with 41 additions and 0 deletions

View File

@ -599,6 +599,16 @@ int main(int argc, char *argv[])
## Exercice 1 ## Exercice 1
1. Est-ce que lexécution de ce programme est correcte? Vous pouvez vous en assurer en lexécutant plusieurs fois.
> Lexécution de ce programme nest 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 nest 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 quil donne le résultat attendu.
## Exercice 2 ## Exercice 2
## Exercice 3 ## Exercice 3

31
TP6/Exo1/ex1.c Normal file
View File

@ -0,0 +1,31 @@
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <assert.h>
#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;
}