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
Mary-Kate Olsenoriginal
2025-01-09 07:14:48901parcourir

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 :

<code class="language-csharp">private ConcurrentDictionary<string, byte[]> _data;</code>

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 :

<code class="language-csharp">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
}</code>

(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:
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