Maison >développement back-end >C++ >Comment réaliser des opérations HashSet Thread-Safe dans .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!