Professional Documents
Culture Documents
Introduction
Programme squentiel: excution squentielle des instructions
Attendre la fin dexcution de la premire instruction pour pouvoir lancer la deuxime Impossible de traiter deux instructions la fois
Un programme est multitche quand il lance (ou peut lancer) lexcution de plusieurs parties de son code en mme temps
A un moment donn, il comporte plusieurs points dexcution lis aux diffrentes parties qui s'excutent en parallle Tous les systmes dexploitation modernes sont multitches et ils permettent lexcution de programmes multitches
Introduction
Le multitche sappuie sur la notion de threads (fil dexcution en franais) Un processus peut lancer plusieurs threads qui se partagent le mme espace mmoire ; ils peuvent accder aux mmes variables Un thread prend moins de ressources systme quun processus (processus lger) les Threads ne s'excutent pas en mme temps mais en temps partag, c'est pour cette raison qu'il est important pour un Thread de toujours laisser une chance aux autres de s'excuter.
3
Exemples de thread
Linterface graphique avec lutilisateur lance un thread pour charger une image pour continuer traiter les vnements gnrs par les actions de lutilisateur Le serveur rseau qui attend les demandes de connexions venant des autres machines lance un thread pour traiter chacune des demandes S'adresser de manire personnelle plusieurs clients simultanment comme les serveurs HTTP ou les Chat.
4
1. 2.
10
11
Exemple de problme
Si x = 2, le code x = x + 1; excut par 2 threads, peut donner en fin dexcution 3 ou 4 suivant lordre dexcution : 1. T1 : lit la valeur de x (2) 2. T2 : lit la valeur de x (2) 3. T1 : calcul de x + 1 (3) 4. T2 : calcul de x + 1 (3) 5. T1 : range la valeur calcule dans x (3) 6. T2 : range la valeur calcule dans x (3) x contient 3 au lieu de 4 !
12
Synchronisation
Il faut donc viter lexcution simultane de sections de code critiques par plusieurs threads En Java le code synchronis sur un objet est utilis pour synchroniser les threads et les empcher dexcuter en mme temps des portions de code Plusieurs threads ne peuvent excuter en mme temps du code synchronis sur un mme objet
13
Exemple
15
Exemple
On lance 3 threads du type suivant :
A la fin de lexcution, on nobtient pas ncessairement 300.000 Pour viter ce problme il faut rendre deposer synchronise :
16
Exemple
17
18
19
Mthode Wait()
public final void wait() throws InterruptedException
objet.wait() ncessite que le thread en cours possde le moniteur de objet bloque le thread qui lappelle, jusqu ce quun autre thread appelle la mthode objet.notify() ou objet.notifyAll() libre le moniteur de lobjet (lopration blocage du thread libration du moniteur est atomique)
21
Mthode notifyAll()
public final void notifyAll() objet.notifyAll()
ncessite que le thread en cours possde le moniteur de objet dbloque tous les threads qui staient bloqus sur lobjet avec objet.wait()
22
Exemple
23
Exemple
24
Exemple
25