Dans une base de données, un blocage est une situation dans laquelle deux threads ou plus sont bloqués (se bloquent) pour toujours, attendant indéfiniment que les conditions de chacun se terminent et débloquent les ressources de données. Dans ce cas, les tâches ne sont pas terminées et sont toujours en attente ; c'est donc considéré comme l'une des complications les plus redoutées du SGBD. Jetons un coup d'œil aux conditions dans lesquelles un blocage se produit et comment éviter un blocage.
Conditions pour qu'une impasse se produise
Si toutes les conditions suivantes sont remplies, une impasse peut se produire.
1. Condition d'exclusion mutuelle : il doit y avoir au moins une ressource qui ne peut pas être utilisée par plusieurs processus à la fois.
2. Conditions de conservation et d'attente : Un processus détenant des ressources peut demander d'autres ressources détenues par d'autres processus du système.
3. Aucune condition de préemption : les ressources ne peuvent pas être forcées à être obtenues à partir du processus avant que leur utilisation ne soit terminée. Les ressources détenues par le processus ne peuvent être libérées qu'une fois qu'il a fini de les utiliser.
4. Condition d'attente de boucle : Un processus attend des ressources détenues par un deuxième processus et le deuxième processus attend un troisième processus... Attendez, le dernier processus attend Attendez le premier processus, donc faire une chaîne circulaire d’attentes.
Comment éviter une impasse
Nous avons appris que si toutes les conditions ci-dessus sont vraies, une impasse se produira, alors évitez-la un ou davantage peut éviter une impasse.
1. Évitez les conditions d'exclusion mutuelle : toutes les ressources doivent être partageables, ce qui signifie que plusieurs processus peuvent obtenir des ressources en même temps. Mais cette approche est presque impossible à réaliser.
2. Évitez les conditions de mise en attente et d'attente : Cette condition peut être évitée si le processus acquiert toutes les ressources dont il a besoin avant de démarrer. Une autre façon d'éviter cette condition consiste à ne pas exécuter les règles qui demandent la ressource pendant que le processus la détient.
3. Saisie de ressources : la saisie de ressources du processus peut entraîner un retour en arrière, cette situation doit donc être évitée pour maintenir la cohérence et la stabilité du système.
4. Évitez les conditions d'attente circulaires : Cette situation peut être évitée si les ressources sont maintenues dans une hiérarchie et que le processus peut économiser les ressources dans un ordre de priorité croissant. Cela évite l'attente de boucle. Une autre approche consiste à forcer une ressource par règle de processus : un processus peut demander une ressource lorsqu'il libère la ressource qu'il détient actuellement. Cela évite l'attente de boucle.
Résumé : Ce qui précède représente l'intégralité du contenu de cet article, j'espère qu'il sera utile à l'étude de chacun.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!