Comment éviter un blocage .NET
Est il existe des pratiques communes ou des règles pour éviter un blocage dans un programme? Aussi est-il le soutien de CLR ou de tout autre instrument de langage/framework pour Gérer un tel scénario?
N' "verrouiller les choses dans un ordre cohérent"?
Très difficile de se retenir de répondre avec "juste éviter de filetage".
Désolé pour la mauvaise formulation, je veux juste savoir pourrais-je suivre certaines règles pour éviter de tels problèmes (par exemple, Pas de verrou sur cette).
Très difficile de se retenir de répondre avec "juste éviter de filetage".
Désolé pour la mauvaise formulation, je veux juste savoir pourrais-je suivre certaines règles pour éviter de tels problèmes (par exemple, Pas de verrou sur cette).
OriginalL'auteur user854301 | 2012-08-05
Vous devez vous connecter pour publier un commentaire.
MSDN a en fait plusieurs bons articles sur ce sujet, dont:
D'éviter et de Détecter les Blocages dans .NET Applications avec C# et C++
OriginalL'auteur Justin Niessner
Noter que peu de c'est .net-spécifique:
Le plus grand moyen d'éviter un blocage est à de verrouillage dans un ordre cohérent; cela signifie que vous faites régulièrement de blocage plutôt que d'une impasse, mais nécessite beaucoup de réflexion et de planification à propos de ce que vous êtes de verrouillage et quand. Bien sûr, cette pensée et de la planification est nécessaire de toute façon.
Un moyen simple d'y parvenir est: essayez seulement besoin d'un verrou de l'objet à la fois; ainsi, au lieu de verrouillage d'Un et B, vous pouvez verrouiller (séparément) Un puis B. Cela requiert aussi de la pensée et de la planification, mais il est généralement réalisable.
De le prendre, plus généralement, éviter la sur-granulaire serrures peut être un énorme la santé mentale-économiseur d'ici. Pour verrouiller un objet qui pourrait rivaliser, mettre sérieusement en considération en utilisant simplement un verrou unique pour les deux concepts. Dans de nombreux cas, ce n'est pas énorme impact sur le temps passé en compétition, mais rend le code beaucoup plus simple et plus fiable.
En fait, un problème que j'ai avec la langue, c'est que "de prendre une serrure, mais avec un délai d'attente" est tellement code plus intensive que "prendre un verrou". Assurer vous de toujours avoir des délais d'attente peuvent également s'assurer qu'une total de blocage devient récupérable. Mais cela ne devrait seulement être utilisé pour identifier les zones qui sont de verrouillage dans le mauvais ordre, de sorte que vous pouvez les corriger.
OriginalL'auteur Marc Gravell
Je pense que le meilleur vous de faire le tour de votre problème est d'utiliser le processus normal de contrôle. Garde l'accès à vos ressources à l'aide de Mutex ou les Sémaphores.
Cela peut vous aider à
http://msdn.microsoft.com/en-us/library/hw29w7t1(v=vs. 71).aspx
Ouais vous avez raison, en fait les mutex et les sémaphores sont à l'origine des blocages. Je suppose que la seule façon de l'éviter, est de plan très bien la façon dont votre code d'accès à vos ressources.
OriginalL'auteur j0N45