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

Vue: 17802|Répondre: 0

[Communication] Écluse C #

[Copié le lien]
Publié sur 21/02/2019 09:43:39 | | |
1. Pourquoi verrouiller et qu’est-ce qui est verrouillé ?

Lorsque nous utilisons des threads, la méthode la plus efficace est bien sûr asynchrone, c’est-à-dire que chaque thread s’exécute en même temps, sans dépendre l’un des autres ni attendre. Cependant, lorsque différents threads doivent accéder à une certaine ressource, un mécanisme de synchronisation est nécessaire, c’est-à-dire que, lors de la lecture et de l’écriture d’une même ressource, il faut faire en sorte que la ressource soit exploitée uniquement par un seul thread simultanément afin de garantir que chaque opération soit efficace et immédiate, c’est-à-dire pour garantir l’atomicité de son fonctionnement. lock est la méthode de synchronisation la plus couramment utilisée en C#, dans le format lock(objectA){codeB}.


lock(objectA){codeB} semble simple, mais il a en réalité trois significations, ce qui est essentiel pour l’utiliser correctement :
1. L’objet A est-il verrouillé ? Sinon, je le verrouille, sinon j’attends que l’objet A soit libéré.
2. Après verrouillage, les autres threads ne peuvent pas appeler codeB ni utiliser objectA lors de l’exécution de codeB.
3. Après l’exécution de codeB, release objectA, et codeB peut être accessible par d’autres threads.

2. Qu’est-il arrivé à la serrure (celle-ci) ?

Prenons un exemple :

Dans le thread t1, LockMe appelle lock(this), c’est-à-dire c1 dans la fonction principale, et lorsqu’il appelle lock(c1) dans le thread principal, il doit attendre que le bloc de verrouillage dans t1 soit exécuté avant d’accéder à c1, c’est-à-dire que toutes les opérations liées à c1 ne peuvent pas être effectuées, donc on voit que même c1. DoNotLockMe() n’est pas exécuté.





Précédent:C# dans ArraySegment faisant partie du tableau
Prochain:Pratique approfondie de Spring Boot. Chen Shaojian et SpringBoot révèlent + construisent rapidement un système de microservices
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