Éviter les blocages dans un processus multithread
Quelles sont les meilleures pratiques et les expressions idiomatiques quelqu'un devrait s'en suivre afin d'éviter les blocages?
Double Possible de Ce sont des raisons communes pour les blocages?
OriginalL'auteur Nizar Grira | 2009-06-25
Vous devez vous connecter pour publier un commentaire.
Veuillez voir Ce sont des raisons communes pour les blocages?
OriginalL'auteur Mitch Wheat
Il y a quatre conditions qui doit se produire pour de blocage à se produire:
Exclusion mutuelle condition: une ressource qui ne peut pas être utilisé par plus d'un processus à un moment
Tenir et à condition d'attente: les processus déjà entamé des ressources peut demander de nouvelles ressources
Pas de droit de préemption condition: Aucune ressource peut être expulsées de force d'un processus de holding, les ressources ne peut être libéré que par l'action explicite du processus
Circulaire condition d'attente: deux ou plusieurs processus forme une chaîne circulaire où chaque processus attend une ressource que le processus suivant dans la chaîne détient
D'éviter au moins l'un de ces, et de préférence plusieurs, et vous ne devriez pas avoir trop de problèmes.
OriginalL'auteur akatkinson
Il n'y a donc appelé L'algorithme du banquier, pour le blocage de l'évitement. Aussi, vous pouvez envisager l'utilisation de Watch Dog afin de briser la forme de blocage. Ici également quelques points intéressants.
OriginalL'auteur Artem Barger
Canonique de la technique de blocage, éviter, c'est d'avoir une hiérarchie de verrouillage. Assurez-vous que tous les threads d'acquisition de verrous ou d'autres ressources, dans le même ordre. Cela permet d'éviter la situation de blocage où le thread 1 maintenez le verrou A et besoins de verrouillage B tandis que le thread 2 détient lock B et les besoins de verrouillage A. Avec une hiérarchie de verrouillage, les deux fils aurait à acquérir les verrous dans le même ordre (par exemple, Un avant B).
OriginalL'auteur Keith Smith
La meilleure pratique serait par définition d'une classe pour votre fils et ne pas utiliser les champs statiques à partir de cette classe dans votre fil, de sorte que votre fils ne sera pas le partage de la mémoire.
Bien sûr, pour éviter les blocages, vous pourriez aussi éviter l'utilisation de sémaphores, les sections critiques et les mutex. Le moins est le mieux, si vous voulez éviter les blocages. Malheureusement, ceux-ci sont nécessaires dans le cas de la mémoire ou d'autres ressources sont partagées entre les deux threads ou de l'autre vous avez le risque de corruption de données.
OriginalL'auteur Wim ten Brink
Parmi les différentes méthodes pour entrer des sections critiques -- les sémaphores et des mutexs sont les plus populaires.
Un sémaphore est une attente mécanisme et le mutex est un mécanisme de verrouillage, eh bien, le concept est source de confusion pour la plupart, mais en bref, un fil de l'activation d'un mutex ne peut le désactiver. avec cela à l'esprit...
Ne pas permettre à tout processus de verrouillage partiel de ressources, si un processus a besoin de 5 ressources, attendre jusqu'à ce que tous les sont disponibles.
Ces 2 selon moi, ce sont les conditions de base, les 2 restants de la commune 4 précautions peuvent être liées à celles-ci.
Si u n'êtes pas d'accord ps ajouter des commentaires. J'ai gtg déjà en retard, je vais ajouter un nettoyant et une explication plus claire.
OriginalL'auteur vks