Sorbonne Université Master 2017 2018
PR : Travaux Dirigés 5. Synchronisation de threads
Cette séance continue à modifier le programme élaboré à la séance Introduction aux processus légers. On trouvera en annexe le Makefile correspondant aux fichiers à créer. Selon les systèmes, il faudra parfois l’utiliser ainsi :
LDFLAGS=’-lpthread’ make but
ou le modifier pour donner systématiquement cette valeur à LDFLAGS.
1 Détachement des threads
On reprend la fonction d’addition de valeurs aléatoires dans sa dernière version avec une Thread d’affichage vue au dernier exercice de la séance précédente. Comment utiliser la fonction pthread_detach pour que les threads affichant leur valeur aléatoire soient détachées après leur création ?
$PWD/bin/thread_detach 10
2 Détachement à la création
Modifier encore une fois pour que les threads soient dans l’état détaché lors de leur création, grâce à la fonction pthread_attr_setdetachstate.
$PWD/bin/thread_setdetach 10
3 Synchronisation par broadcast
Une barrière est un mécanisme de synchronisation. Elle permet à N threads de prendre rendez-vous en un point donné de leur exécution. Dès que l’une d’entre elles atteint la barrière, elle reste bloquée jusqu’à ce que toutes les autres y arrivent. Lorsque toutes sont arrivées, chacune peut alors reprendre son exécution.
Ecrire une fonction, qu’on nommera wait_barrier prenant en argument un entier N, permettant à N threads de se synchroniser sur une barrière. Testez votre programme avec la thread suivante :
void* thread_func (void *arg) {
printf ("avant barriere\n");
wait_barrier (((int *)args)[0]);
printf ("après barriere\n");
pthread_exit ( NULL);
}
En exécutant votre programme avec 2 threads, il devra afficher :
avant barrière avant barrière après barrière après barrière
En d’autres termes, on veut que tous les messages « avant barrière » soient affichés avant les messages « après barrière ».
$PWD/bin/thread_broadcast 10
4 Annexes
- Valid CSS 2.1
- Valid XHTML Basic 1.1
- Triple-A conformance Web Content Accessibility Guidelines 2.0
- Valid RSS Atom
-
Calculé le 22 janvier 2021 à 23h43minpar DidacSPIPSorbonne Université
- Mobile OK
- SPIP