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

Vue: 30344|Répondre: 2

[Source] Sécurité filetage en C# avec verrouillage

[Copié le lien]
Publié sur 13/06/2016 17:26:25 | | |

Si votre code est dans un processus qui a plusieurs threads en cours en même temps, il peut exécuter le code en même temps. Si le résultat de chaque exécution est le même que celui d’un seul thread, et que les valeurs des autres variables sont les mêmes qu’attendues, c’est sûr pour les threads.
En d’autres termes, l’interface fournie par une classe ou un programme est atomique pour les threads ou le passage entre plusieurs threads ne conduit pas à une ambiguïté dans le résultat d’exécution de l’interface, ce qui signifie que nous n’avons pas besoin de prendre en compte la synchronisation.
Les problèmes de sécurité des threads sont causés à la fois par des variables globales et statiques.
Si chaque thread n’a que des opérations de lecture pour les variables globales et les variables statiques, mais pas d’opérations d’écriture, en général, cette variable globale est thread-safe ; Si plusieurs threads effectuent simultanément des opérations de lecture et d’écriture sur une variable, la synchronisation des threads est généralement nécessaire, sinon cela peut affecter la sécurité du thread.

Le but du verrou est d’empêcher les opérations concurrentes lors de l’exécution multi-thread, et les objets du type de référence permettent à un seul thread d’opérer à la fois dans sa zone verrouillée.

Le verrou ne peut verrouiller qu’une seule variable de type de référence, c’est-à-dire verrouiller une adresse




Il existe une différence entre les résultats de l’exécution avec et sans verrouillage :

Après verrouillage : la valeur de i diminuera un par un, il n’y aura ni sauts, ni sortie répétée, jusqu’à la valeur de 0 ;

Pas de verrouillage : la valeur sortie de i sautera, décroissant discontinu, et peut aussi avoir une sortie de -1 ;

Raison : Après avoir ajouté un verrou, un seul thread peut exécuter le code dans la zone verrouillée à la fois, et les deux threads sont exécutés dans l’ordre, donc il n’y aura pas de sortie interrompue.




Précédent:Utilisateur annulé la sauvegarde de dialogue (Outils de base de données visuelles MS)
Prochain:Une bonne classe DBHelper qui exécute des procédures stockées
Publié sur 14/06/2016 10:53:36 |
 Propriétaire| Publié sur 10/02/2022 09:18:58 |
Le moniteur principal de verrouillage .NET/C# offre une explication approfondie
https://www.itsvse.com/thread-9633-1-1.html
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