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.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation
  5. 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é. top montre 0 % de processeur, et gdb montre les deux threads dans pthread_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.