Qu'est-ce qu'une impasse
Regardons d'abord un tel exemple de vie: il y a un pont sur une rivière, avec un pont de pont étroit qui ne peut accueillir qu'une seule voiture et ne peut pas permettre à deux voitures d'aller en parallèle. Si deux voitures A et B conduisent sur le pont depuis les deux extrémités du pont, puis pour la voiture A, il traverse une section de la route sur le côté gauche du pont du pont (c'est-à-dire qu'il occupe une partie des ressources du pont). Si vous voulez traverser le pont, vous devez attendre que la voiture B abandonne le pont du pont à droite. La voiture A ne peut pas avancer à ce moment; Pour la voiture B, il traverse une section de la route sur le côté droit du pont du pont (c'est-à-dire qu'il occupe une partie des ressources du pont). Si vous voulez traverser le pont, vous devez attendre que la voiture A abandonne le pont du pont à gauche, et la voiture B ne peut pas avancer à ce moment. Les voitures des deux côtés n'ont pas inversé, ce qui a fait de l'attente les uns les autres pour abandonner le pont du pont, mais personne n'a cédé et n'attendait pas d'infini. Ce phénomène est une impasse. Si la voiture est comparée à un processus et que le pont de pont est utilisé comme ressource, le problème ci-dessus est décrit comme: Le processus A possède une ressource R1, en attendant la ressource RR occupée par le processus B; Le processus B possède des ressources RR, en attendant les ressources R1 occupées par le processus A. De plus, les ressources R1 et RR ne permettent qu'à un processus d'occuper, c'est-à-dire que deux processus ne sont pas autorisés à occuper en même temps. Par conséquent, aucun des deux procédés ne peut continuer à s'exécuter. Si aucune autre mesure n'est prise, cette situation d'attente du cycle se poursuivra indéfiniment et une impasse du processus se produira.
Dans les systèmes informatiques, les ressources logicielles et matérielles peuvent être bloquées. Par exemple: il n'y a qu'un seul pilote CD-ROM et une imprimante dans le système. Un processus possède le pilote CD-ROM et s'applique à une imprimante; L'autre processus est propriétaire de l'imprimante et s'applique à un CD-ROM. En conséquence, les deux processus sont bloqués et ne peuvent jamais être déconnectés par eux-mêmes.
La soi-disant impasse fait référence à une situation où plusieurs processus traversent les ressources qu'ils occupent et restent indéfiniment dans une impasse. De toute évidence, s'il n'y a pas de force externe, tous les processus impliqués dans l'impasse seront toujours bloqués. D'après l'exemple ci-dessus, nous pouvons voir que la raison fondamentale des impasses dans les systèmes informatiques est des ressources limitées et un fonctionnement inapproprié. C'est-à-dire: l'une des raisons est que le système fournit trop peu de ressources et est loin de répondre aux exigences des ressources des processus simultanés. Cette impasse causée par des ressources concurrentes est au cœur de notre discussion. Par exemple: le message est une ressource temporaire. À un moment donné, le processus A attend un message envoyé par le processus B, le processus B attend un message envoyé par le processus C, et le processus C n'attend un message envoyé par le processus A. Si le message n'est pas arrivé, aucun des trois processus, A, B et C ne peuvent pas avancer et les impasses ne se produiront également dans la communication du processus. Une autre raison est les blocs de non-blocs causés par l'ordre de progression des processus inappropriés. Les petites ressources ne peuvent pas nécessairement entraîner des blocs de non-blocs. Tout comme deux personnes traversant un pont unique, si les deux doivent passer en premier et sont imprécises sur le pont unique, ils mèneront inévitablement à une impasse pour les ressources de compétition; Cependant, si deux personnes vérifient d'abord s'il y a d'autres personnes sur le pont avant d'aller au pont et de remonter le pont par eux-mêmes lorsqu'il n'y a pas d'autres personnes sur le pont, le problème sera résolu. Par conséquent, si le programme est conçu de manière déraisonnable et que le processus est favorisé de manière inappropriée, elle provoquera également des blocs de blocage.
Impasse
Ce n'est que lorsque le thread T1 occupe O1 et nécessite également O2, et que T2 prend O2 pour le moment et nécessite également O1 qu'il y aura une impasse. (Semblable à deux personnes mangeant avec deux baguettes, ils ont tous deux besoin d'une baguette de l'autre partie pour manger)
Le code suivant: Le thread T1 occupe O1 et ne libère qu'O1 après avoir obtenu l'objet O2. Le thread T2 occupe d'abord O2 puis acquiert O1. À l'heure actuelle, O1 est occupé par le fil T1, O2 est occupé par le fil T2, T1 et T2 attendent infiniment et une impasse se produira.
Package Javasimple; / ** * Demo de blocage * @author hookui * * / classe publique diesynchronisé {public static void main (String [] args) {/ ** * créer et démarrer deux threads t1 et t2. Les deux threads doivent partager deux objets O1 et O2 * / objet O1 = New Object (); Objet o2 = nouveau objet (); Thread T1 = nouveau thread (nouveau T1 (O1, O2)); Thread T2 = nouveau thread (nouveau T2 (O1, O2)); t1.start (); t2.start (); }} // Créer deux classes de threads T1 implémente Runnable {objet o1; Objet o2; public t1 (objet o1, objet o2) {this.o1 = o1; this.o2 = o2; } public void run () {// verrouille O1 et O2 synchronisé (o1) {try {Thread.Sleep (1000); } Catch (InterruptedException e) {// TODO Block de catch généré automatiquement e.printStackTrace (); } synchronisé (o2) {System.out.println ("o2"); }}}}}}} La classe T2 implémente Runnable {objet o1; Objet o2; public t2 (objet o1, objet o2) {this.o1 = o1; this.o2 = o2; } public void run () {synchronisé (o2) {try {thread.sleep (1000); } Catch (InterruptedException e) {// TODO Block de catch généré automatiquement e.printStackTrace (); } synchronisé (o1) {System.out.println ("o1"); }}}} Remarque: la concurrence ne se produit que lorsque l'O1 et l'O2 sont partagés. Deux objets peuvent être partagés par le biais de constructeurs.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.