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

Vue: 2976|Répondre: 2

[Source] Comment la paresse en C# protège les threads

[Copié le lien]
Publié sur 02/07/2023 21:41:55 | | |
Après .NET 4.0, un type de chargement paresseux sécurisé a été fourni dans le .NET FrameworkParesseux
Lazy peut fonctionner dans un environnement multithread, garantiGetValueLa fonction n’est exécutée qu’une seule fois, mettant ainsi en placeMode singleton

Par le passé, nous utilisions des verrous de jugement quadratique pour implémenter des motifs singletons, ou pour utiliser des fonctions d’initialisation statiques de classes
Avec le type Laisy, ce processus est simplifié et les performances sont meilleures

Lorsque Lazy est créé, vous pouvez spécifier le mode d’installation du thread, il y a actuellement deux modes,Publication uniquementExplicationet publication

Mode Publication Only


1. Exécuter la fonction d’initialisation et la mettre en boîte dans un système interneBoîtetype, résoudre le problème du jugement de valeur nul, si le cas a été créé, il retournera nul,Le processus est peu sécurisé en termes de threads

2. Déterminer si le m_boxed est vide, m_boxed est le champ sauvegardé par valeur, s’il est égal à vide, il est mis sur encadré, cette méthode peut garantir l’atomicité,Le procédé est sans filetage

3. Si CreateValue retourne vide, cela signifie que d’autres threads ont déjà créé des instances, puis définissez sur des instances déjà créées

4. Marquez la méthode d’initialisation comme initialisée, ce qui se produit généralement en cas d’exécution concurrente, et exécutez CreateValue plusieurs fois


Publication uniquementMode est utilisé en fonction deInterverrouillé.CompareExchange, cette classe contient des méthodes d’atomicitéCAS (Comparer et échanger)

Le CAS est implémenté à l’aide d’instructions atomiques fournies par le CPU, et différentes versions d’exécution peuvent avoir des implémentations différentes
Implémentation spécifique interverrouillée Dans la méthode native, les amis intéressés peuvent vérifier l’implémentation spécifique via le code coreclr/jvm

Dans ce mode,Une fonction singleton peut s’exécuter plusieurs fois, mais au final il est garanti qu’une seule instance sera obtenue

Mode d’excution et de publication

Explicationet publicationmode utilisé dans ce modeVolatile+MonitorMoniteurC’est vraiserrureL’implémentation de l’instruction, l’implémentation Monitor, dans le code natif, est un verrou lourd

MoniteurLa veille en file d’attente et en thread est prise en charge, ce qui peut garantir que l’ensemble du bloc de méthode soit exécuté dans un état monothread


Lien original :La connexion hyperlientérée est visible.




Précédent:ASP.NET la différence entre ThreadStatic, CallContext et HttpContext
Prochain:SQL Server interroge le nombre actuel de connexions à la base de données
 Propriétaire| Publié sur 02/07/2023 21:42:16 |
 Propriétaire| Publié sur 04/07/2023 19:19:45 |
Optimisation des performances C# : Lazy initialise Lazy<T> avec un délai
https://www.itsvse.com/thread-7700-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