Maison >développement back-end >C++ >Comment puis-je implémenter une file d'attente d'historique de taille fixe à l'aide de ConcurrentQueue ?
Extension de ConcurrentQueue pour la gestion de l'historique de taille fixe
System.Collections.Concurrent.ConcurrentQueue est un outil robuste pour gérer les files d'attente dans les environnements multithread. Cependant, il ne prend pas automatiquement en charge une limitation de taille fixe ; les entrées plus anciennes ne sont pas automatiquement supprimées lorsque la file d'attente est pleine.
Présentation de la solution FixedSizedQueue
Pour surmonter cette limitation, nous allons créer une FixedSizedQueue
classe wrapper. Cette classe améliore la fonctionnalité de ConcurrentQueue
pour supprimer automatiquement les éléments obsolètes lors de nouvelles insertions.
Stratégie de mise en œuvre
FixedSizedQueue
encapsule une instance privée ConcurrentQueue
et un objet de verrouillage pour la sécurité des threads. La méthode Enqueue
vérifie le Count
de la file d'attente. S'il dépasse le Limit
prédéfini, la méthode acquiert le verrou, puis retire les éléments de la file d'attente à plusieurs reprises jusqu'à ce que le Count
soit en dessous du Limit
.
Application pratique
Pour utiliser FixedSizedQueue
, initialisez-le avec le Limit
souhaité :
<code class="language-csharp">FixedSizedQueue<string> urlQueue = new FixedSizedQueue<string>(100);</code>
Ajouter de nouvelles URL (et supprimer automatiquement les anciennes) est simple :
<code class="language-csharp">urlQueue.Enqueue("example.com");</code>
Avantages
FixedSizedQueue
offre une approche rationalisée et efficace pour gérer les données historiques de taille fixe. Il donne la priorité aux entrées les plus récentes tout en supprimant automatiquement les plus anciennes, ce qui est idéal pour les scénarios avec un stockage limité ou lorsque le suivi d'un nombre spécifique d'événements récents est crucial.
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!