changement du fichier tp scr
This commit is contained in:
49
TP_SCR3.1/TP_Threads/document-reponse-tp-thread-yolou.c
Normal file
49
TP_SCR3.1/TP_Threads/document-reponse-tp-thread-yolou.c
Normal file
@@ -0,0 +1,49 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <pthread.h>
|
||||
#include <assert.h>
|
||||
|
||||
#define NUM_THREADS 16
|
||||
|
||||
void *thread(void *thread_id) {
|
||||
long id = ((long ) thread_id);
|
||||
printf("Hello from thread %ld\n", id);
|
||||
|
||||
return (void*)(2*id);
|
||||
}
|
||||
|
||||
int main() {
|
||||
pthread_t threads[NUM_THREADS];
|
||||
int t[NUM_THREADS];
|
||||
long res;
|
||||
for (long i = 0; i < NUM_THREADS; i++){
|
||||
// t[i] = i;
|
||||
assert( pthread_create(&threads[i], NULL, thread, (void*)i) == 0);
|
||||
}
|
||||
|
||||
for (int i = 0; i < NUM_THREADS; i++){
|
||||
assert( pthread_join(threads[i],(void *)&res) == 0);
|
||||
printf("%ld\n",res);
|
||||
}
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
// 1.L'execution est-elle correcte ?
|
||||
// Non la version est fause
|
||||
/*On voit parfois des IDS faux/repetés selon les exécutions.
|
||||
|
||||
2. Si ce n'est pas le cas, expliquez pourquoi
|
||||
|
||||
Probleme :
|
||||
(Parce qu'on passe l'adresse d'une variable partagée (&i) qui change pendant la creation des threads.
|
||||
Les threads lisent la meme adresse, pas uenc opie de la valeur -> condition de course + duree de vie/visibilité non garanties)
|
||||
&i est l'adresse de la meme variable i de la bouche (une seule variable, qui change de valeur).
|
||||
Les threads démarrent en parrallèle et lisent tous la meme adresse.h
|
||||
Comme i continue de s'incrementer, le contenu vu par les threads depends du timing -> plusieurs threads peuvent lire la meme valeur, ou tous lire la valeur finale(16);
|
||||
Resultat : sorties incorrects / pas vraiment deterministes(certains IDs manquent, d'autres répétes).*/
|
||||
|
||||
|
||||
// Exercie 2 :
|
||||
|
||||
Reference in New Issue
Block a user