Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 20027|Répondre: 0

[Source] Le mot-clé verrouillage C# marque un bloc d’instructions comme une zone critique en obtenant un mutex pour un objet donné, en exécutant l’énoncé, mais...

[Copié le lien]
Publié sur 31/12/2015 17:51:01 | | |
Le mot-clé verrouillage marque un bloc d’instructions comme zone critique en prenant un mutex pour un objet donné, en exécutant l’instruction, puis en relâchant le verrou.

L’instruction lock utilise essentiellement Monitor.Enter et Monitor.Exit, c’est-à-dire que Monitor.Enter (this) s’exécute lorsque lock(this) est exécuté, et Monitor.Exit (this) est exécuté à la fin de la coupelle curly. Quelle est sa signification ? Pour tout objet, la première partie de la mémoire est l’adresse de toutes les méthodes, et la seconde partie est un index. Il pointe vers un SyncBlock dans la zone SyncBlock Cache du CLR. Qu’est-ce que cela signifie ? C’est-à-dire que lorsque vous exécutez Monitor.Enter(Object), si la valeur d’indice de l’objet est négative, sélectionnez un SyncBlock dans le cache SyncBlock et placez son adresse dans l’index de l’objet. Cela complète le verrou marqué par objet, et les autres threads veulent effectuer à nouveau l’opération Monitor.Enter(objet), ce qui obtiendra un index avec un objet positif, puis attendre. Jusqu’à ce que l’indice devienne négatif, c’est-à-dire que le thread utilise Monitor.Exit(object) pour rendre l’index négatif.

À quoi il faut prêter attention lorsque vous utilisez la serrure :
1. verrouillage ne peut pas verrouiller la valeur nulle Un objet peut pointer vers nulle, mais la valeur nulle n’a pas besoin d’être libérée. (Voir aussi : Comprendre le nul complet)
2. Lock ne peut pas verrouiller le type de chaîne, bien qu’il soit aussi un type de référence. Parce que le type de chaîne est « surélevé » par le CLR
Cela signifie qu’il n’y a qu’une seule instance d’une chaîne donnée dans l’ensemble du programme, et que ce même objet représente ce texte dans tous les threads de tous les domaines d’application en cours. Ainsi, tant qu’un verrou est placé sur une chaîne contenant le même contenu n’importe où dans le processus applicatif, toutes les instances de cette chaîne dans l’application seront verrouillées. Il est donc préférable de verrouiller des membres privés ou protégés qui ne seront pas persistés.
3.verrouillage L’objet est la frontière mémoire d’un bloc programme
4. Le type de valeur ne peut pas être verrouillé, car l'« objet est libéré » en rouge dans le texte précédent, et le type de valeur n’est pas un type de référence
5.lock évite de verrouiller des types ou objets publics qui ne sont pas contrôlés par le programme.
Par exemple, si l’instance est accessible au public, le verrouillage (ceci) peut poser problème car un code non contrôlé peut aussi verrouiller l’objet. Cela peut entraîner des blocages, où deux threads ou plus attendent de libérer le même objet. Le verrouillage des types de données publiques (par opposition aux objets) peut également poser des problèmes pour la même raison.
Lors de l’utilisation de verrou (ceci), la valeur de la variable membre de classe peut être modifiée par la méthode qui n’est pas dans la zone critique

Scénario d’application : Il est souvent utilisé pour éviter des exceptions incertaines dans la valeur des variables publiques causées par des opérations multithread afin d’assurer la sécurité des opérations









Précédent:Win8 lance le service SQL Server 2012
Prochain:[Vitesse] Scanner de port ouvert à segment IP pour une vitesse de balayage rapide !!
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com