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

Vue: 4864|Répondre: 4

[Source] 【Tourner】C# concurrence multi-threads sous divers verrous

[Copié le lien]
Publié le 13-04-2023 à 18:44:49 | | | |
Dans des circonstances normales, tant que la programmation multithread est impliquée, la complexité du programme augmentera considérablement, les performances diminueront considérablement, et la probabilité de bugs augmentera considérablement.

La programmation multithread est destinée à exécuter un programme en parallèle afin d’améliorer les capacités de traitement des données, mais dans la plupart des cas, elle implique une concurrence pour des ressources partagées, il doit donc être verrouillé lors de la modification d’objets ressource. Cependant, il existe de nombreuses façons d’implémenter les verrous, alors examinons la mise en œuvre et les performances de plusieurs types de verrous en C#.

Plusieurs façons d’utiliser les serrures

1. Verrou atomique

Atteindre la concurrence « sans serrure » via l’opération atomique Interlocked. ComparerÉchange.

L’explication officielle est de fournir des opérations atomiques pour des variables partagées par plusieurs threads. Espace de noms : System.Threading

2. Zone critique

La sérialisation de plusieurs threads pour accéder à des ressources publiques ou à un morceau de code est rapide et adaptée pour contrôler l’accès aux données. La syntaxe de verrou en C# est un sucre syntaxique pour la zone critique (Moniteur).

3. Fonctionnement atomique

Les opérations atomiques, qui sont un cas particulier, sont intrinsèquement sûres pour les threads, il n’y a donc pas besoin de les verrouiller.

Interprété officiellement comme l’incrémentation de la valeur d’une variable donnée sous forme d’opération atomique et le stockage du résultat. Espace de noms : System.Threading

4. Verrou de lecture et d’écriture

Les verrous lecture-écriture permettent de lire des ressources lorsque d’autres programmes écrivent, donc si la ressource permet des lectures inappropriées, c’est plus approprié.

L’explication officielle indique un état verrouillé utilisé pour gérer l’accès aux ressources, permettant des lectures multithread ou un accès exclusif en écriture. L’espace de noms est System.Threading

5. Sémaphore

Des sémaphores, conçus pour contrôler un nombre limité de ressources utilisateur.

L’explication officielle limite le nombre de threads pouvant accéder à une ressource ou à un pool de ressources en même temps. L’espace de noms est System.Threading

6. Événements

Utilisé pour notifier le fil de discussion que certains événements se sont produits, lançant ainsi le début d’une tâche successeure.

L’explication officielle indique que les événements de synchronisation de thread se réinitialisent automatiquement lorsqu’un signal est reçu après la libération d’un thread. De tels types ne peuvent pas être hérités.

7. Exclusion mutuelle

Il existe une classe Mutex en C#, juste sous l’espace de noms System.Threading, Mutex est en réalité un mutex, qui peut non seulement gérer la concurrence entre plusieurs threads, mais aussi gérer la concurrence entre processus.


Code de test de performance

Exécutez le code

Résultats des tests de performance



Note : Les données ci-dessus ne résultent que des performances matérielles de l’environnement de test actuel, et ne peuvent être comparées qu’entre elles.

1) Dans divers tests, c’est clairement le plus rapide à ne pas bloquer, donc essayez d’éviter la concurrence des ressources qui mène à un blocage de fonctionnement.

2) Interlocked.CompareExchange montre constamment de meilleures performances en multithreading, se classant deuxième.

3) La troisième serrure, la zone critique, montre aussi de bonnes performances, donc merci de réfuter les autres qui disent que la performance de la serrure est faible.

4) La quatrième place est l’opération à variable atomique (atomique), mais actuellement, elle ne supporte que l’auto-augmentation et la soustraction des variables, et l’applicabilité n’est pas forte.

5) Les performances du cinquième verrou lecture/écriture (ReaderWriterLockSlim) sont également correctes, et il ne supporte rien de la lecture, et la praticité reste relativement bonne.

6) Les sémaphores, événements et mutex restants ont les pires performances, bien sûr, ils ont leur propre champ d’application, mais ils ne sont pas efficaces pour gérer la concurrence des ressources.

Adresse du lien original :La connexion hyperlientérée est visible.





Précédent:ASP.NET Core (16) Dépendant de l’injection de services d’enregistrement dynamiques
Prochain:OpenWrt de la route douce est lancé via une clé USB
 Propriétaire| Publié le 13-04-2023 à 18:46:52 |
Les programmes C# n’autorisent qu’une seule instance à exécuter le bon code
https://www.itsvse.com/thread-3391-1-1.html

La différence entre ManualResetEvent et AutoResetEvent appris par les threads C#
https://www.itsvse.com/thread-4810-1-1.html

[Combat réel]. NET/C# utilise SemaphoreSlim pour limiter les méthodes d’exécution concurrentes
https://www.itsvse.com/thread-10259-1-1.html

C# Lecture/écriture Verrouillage Lecteur Écrivain Verrouillage Usage limité
https://www.itsvse.com/thread-3545-1-1.html

.net/c# verrouillage de concurrence multithread utilisateur (string){...} Explication détaillée
https://www.itsvse.com/thread-7764-1-1.html
Publié le 13-04-2023 à 19:21:44 |
Apprends un peu...
Publié le 16-05-2023 à 20:03:52 |
Apprends un peu...
Publié le 19-05-2023 à 11:41:25 |
Apprendre à apprendre
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