L'interblocage
Problème: Lorsque (au moins) deux processus sont en exclusion mutuelle sur (au moins) 2 ressources critiques il y a risque d'interblocage. Des processus se bloquent mutuellement sur une ressource critique détenue par l'autre.

Programme A
{   ...
    P(S1);
    P(S2);
    ...
    V(S2);
    V(S1); }

Programme B
{   ...
    P(S2);
    P(S1);
    ...
    V(S1);
    V(S2);}

Imaginons que les sémaphores sont tous les deux initialisés à 1 et qu'un processus P1 est associé au programme A et qu'un processus P2 est associé à B. Supposons que P1 se fait interrompre juste après P(S1), et que P2 exécute P(S2) alors il se bloque sur P(S1). Lorsque P1 reprend l'UC, il se bloque sur P(S2) ... IL Y A UN INTERBLOCAGE.

Solution: La seule solution consiste à détruire un ou tous les processus interbloqués et de les relancer plus tard. Il peut y avoir une solution préventive, le calcul d'un graphe qui doit être sans circuit mais elle coute très chère en temps.
 
Exemple
Une personne veut tracer un trait avec une règle et un crayon, une autre a besoin de la règle et du crayon pour faire un schéma. Si l'une prend la règle et l'autre le crayon, il y a interblocage. Il y a une seule règle et un seul crayon.

Programme tracer-trait
{  P(règle);
    P(crayon);
    tracer-le-trait;
    V(crayon);
    V(règle);}

Programme faire-schéma
{  P(crayon);
    P(règle);
    faire-le-schéma;
    V(règle);
    V(crayon);}

suivant    plan