TP2.2 : Gestion des Threads
Exercice1:
Écrire un programme qui crée un thread et qui affiche sur la console « Hello !! Je suis le
thread!! »
1. Copier le code suivant sur un fichier, sous le nom Hello_thread.c :
#include <stdio.h>
#include <pthread.h> / contient toutes les fonctions relatives aux threads/
void affichage(void arg)
{
printf("Hello!! Je suis le Thread\n");
return NULL;
}
Publicité
int main()
{
pthread_t tid;
printf("Debut prg principal...\n");
pthread_create(&tid,NULL,affichage,NULL); // pthread_create crée un nouveau
thread
printf("fin prg principal....\n");
return 0;
}
2. Compiler le fichier soit en utilisant :
make Hello_thread
gcc -o Hello_thread Hello_thread.c
Publicité
Erreur ! Pourquoi ?
Il faut linker la lib pthread.
Utilisez donc cette commande pour compiler :
gcc -o Hello_thread Hello_thread.c -lpthread
3. Exécuter le programme :
Pas d'affichage. Pourquoi ?
4. Ajouter sleep(5) après l'appel de pthread_create().
Est-ce que le thread est proprement terminé ?
5. Remplacer donc sleep() par wait(0).
6. Utiliser maintenant pthread_join, compiler puis exécutez le pgm.
A.Channouf
TP2.2 : Gestion des Threads
Publicité
Note : l'équivalent de wait() et waitpid(), pour les threads, c'est pthread_join().
pthread_join : force le programme principal à attendre la terminaison du thread.
7. Appeler pthread_exit au niveau du thread et ajouter un autre affichage après l'appel de exit.
Note : pthread_exit : termine le thread en fournissant un code de retour, à la différence de
exit() qui termine le processus et tous ses threads.
Exercice2:
Écrire un programme qui crée deux threads l'un affiche des nombres de 1 à 10 et l'autre
affiche des nombres de 11 à 20.
Répéter plusieurs fois l'exécution de ce pgm.
Qu'est que vous remarquez ?
Exercice3:
Écrire un programme qui crée un thread qui calcule le factorielle d'un nombre donné par le
Publicité
pgm principal.
Note : Les threads peuvent partager des données entre eux ( ≠ les processus le fils et le père
fonctionnent indépendamment).
Mais cela pose des problèmes !
En effet, quand deux threads cherchent à modifier deux variables en même temps.
Que se passe-t-il ?
Et si un thread lit une variable quand un autre thread la modifie ?
C'est assez problématique. Par conséquent, nous allons voir un mécanisme de synchronisation:
les mutex, un des outils permettant l'exclusion mutuelle.
But du prochain chapitre : IPC( Inter-Process Communication)
A.Channouf