Académique Documents
Professionnel Documents
Culture Documents
Syscalls
POSIX dispose d'une bibliothèque pthread qui contient des appels système pour les
threads, similaires aux appels système des processus.
int pthread create(pthread t *thread, const pthread attr t *attr, void *(*start routine) (void *), void *arg)
Démarre un nouveau thread dans le processus appelant. Le thread commence son
exécution en invoquant start routine qui prend arg comme seul argument.
void pthread exit(void *retval)
Termine le thread appelant et stocke une valeur dans retval qui est disponible pour un
autre thread dans le même processus qui se joint. De la même manière qu'un retour
de main appelle implicitement exit pour les processus, un retour de start routine appelle
implicitement pthread exit.
int pthread yield(void)
Le thread appelant renonce à l'unité centrale et est placé à la fin de la file d'attente
d'exécution.
int pthread join(pthread t thread, void **retval)
Le thread appelant attend que thread se termine. Pour un retval non-NULL, l'état de sortie
du thread (c'est-à-dire celui de pthread exit) est rendu disponible dans retval.
1/1
Travaux dirigés Système d’exploitation 2
Exercice 1
Quelles sont les sorties possibles du programme suivant ? Comment pouvez-vous modifier
le programme pour qu'il imprime "HELPER" avant "MAIN" ?
2/1
Travaux dirigés Système d’exploitation 2
Exercice 2
Que doit afficher le programme suivant ?
Comme les deux threads sont dans le même processus, ils partagent le même espace
d'adressage. Même si chaque thread a sa propre pile, un espace d'adressage partagé
signifie que les threads du même processus peuvent accéder aux piles des autres. En
conséquence, le thread helper modifiera i dans le thread principal, donnant un résultat de
"i est 2".
3/1
Travaux dirigés Système d’exploitation 2
Exercice 3
Que doit afficher le programme suivant ?
Le programme peut imprimer soit "I am the main", soit "I am the helper". pthread join est
appelé après le printf, ce qui signifie que l'ordre d'exécution n'est pas garanti par
l'instruction printf.
4/1