Maison > développement back-end > C++ > Comment réaliser des opérations HashSet Thread-Safe dans .NET ?

Comment réaliser des opérations HashSet Thread-Safe dans .NET ?

Mary-Kate Olsen
Libérer: 2025-01-09 07:14:48
original
941 Les gens l'ont consulté

How to Achieve Thread-Safe HashSet Operations in .NET?

Alternatives HashSet thread-safe dans .NET

Cet article explore les approches thread-safe pour gérer les HashSet collections dans .NET, offrant des alternatives au verrouillage manuel. Votre exemple utilise un verrouillage personnalisé autour des opérations HashSet, une méthode valide mais potentiellement sujette aux erreurs. Examinons de meilleures options.

Le framework .NET fournit la classe ConcurrentDictionary dans l'espace de noms System.Collections.Concurrent comme solution supérieure. ConcurrentDictionary offre une fonctionnalité de table de hachage thread-safe, gérant efficacement les lectures et écritures simultanées. Voici comment l'utiliser :

private ConcurrentDictionary<string, byte[]> _data;
Copier après la connexion

Vous pouvez également créer une classe ConcurrentHashSet personnalisée. Cette approche implique des mécanismes de verrouillage internes pour garantir la sécurité des threads. Un exemple de mise en œuvre est fourni ci-dessous :

public class ConcurrentHashSet<T> : IDisposable
{
    private readonly ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion);
    private readonly HashSet<T> _hashSet = new HashSet<T>();

    public bool Add(T item) { ... } //Implementation as in original example
    public void Clear() { ... } //Implementation as in original example
    public bool Contains(T item) { ... } //Implementation as in original example
    public bool Remove(T item) { ... } //Implementation as in original example
    public int Count { ... } //Implementation as in original example
    public void Dispose() { ... } //Implementation as in original example
    protected virtual void Dispose(bool disposing) { ... } //Implementation as in original example
    ~ConcurrentHashSet() { ... } //Implementation as in original example
}
Copier après la connexion

(Remarque : le ... indique que le code de l'exemple d'origine doit être inséré ici par souci de concision).

L'utilisation de ConcurrentDictionary ou d'un ConcurrentHashSet bien implémenté améliore considérablement la clarté du code et réduit le risque d'erreurs de synchronisation par rapport au verrouillage manuel. Ces solutions intégrées sont optimisées pour les performances et la sécurité des threads.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal