L'interblocage
L'interblocage et les quatre conditions de Coffman, le graphe d'allocation, la prévention par un ordre sur les verrous, l'évitement par l'algorithme du banquier, la différence avec la famine et le blocage actif.
- 26 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Interblocage : de quoi s'agit-il ?
Voir la réponse
Situation où chaque thread d'un groupe attend une ressource que détient un autre du groupe : aucun ne peut avancer.
Avec des verrous bloquants, les threads sont endormis, pas occupés : le processeur est au repos et le programme est figé sans message d'erreur.
Quel entrelacement de ces deux threads mène à l'interblocage ?
```c
/* T1 */ /* T2 */
lock(&a); lock(&b);
lock(&b); lock(&a);
... ...
unlock(&b); unlock(&a);
unlock(&a); unlock(&b);`- T1 prend a, T2 prend b, puis chacun veut l'autre verrou
- T1 exécute tout jusqu'à ses deux unlock, puis T2 exécute tout
- T2 exécute tout jusqu'à ses deux unlock, puis T1 exécute tout
- T1 prend a puis b, et T2 attend b pendant que T1 travaille
Voir la réponse
T1 prend a, T2 prend b, puis chacun veut l'autre verrou
Dans les trois autres cas, un thread finit ou ouvre la voie à l'autre. L'interblocage exige que chacun tienne un verrou au moment où il demande l'autre : c'est l'attente circulaire.
Les quatre conditions de Coffman, toutes nécessaires à un interblocage : …, …, … et ….
Voir la réponse
Les quatre conditions de Coffman, toutes nécessaires à un interblocage : exclusion mutuelle, détention et attente, pas de réquisition et attente circulaire.
Il suffit d'en rendre une impossible pour qu'aucun interblocage n'ait lieu : c'est le principe de la prévention.
Graphe d'allocation des ressources : de quoi s'agit-il ?
Voir la réponse
Graphe dont les sommets sont les threads et les ressources, avec un arc pour chaque ressource détenue et un arc pour chaque demande en attente.
Un cycle sur des ressources à un seul exemplaire signifie interblocage ; avec plusieurs exemplaires, un cycle est nécessaire mais pas suffisant.
Un programme à deux threads est figé.
topmontre 0 % de processeur, etgdbmontre les deux threads danspthread_mutex_lock. De quoi s'agit-il ?- Un interblocage : chaque thread attend le mutex de l'autre
- Un blocage actif : les deux threads se relancent en boucle sans fin
- Une famine : un thread est toujours doublé par l'autre à chaque tour
- Une attente active : chaque thread teste en boucle le mutex de l'autre
Voir la réponse
Un interblocage : chaque thread attend le mutex de l'autre
Processeur à 0 % et threads endormis dans lock : ils attendent, ils ne tournent pas. Un blocage actif ou une attente active feraient monter le processeur, et une famine laisserait l'autre thread avancer.