ホームページ >バックエンド開発 >C++ >ConcurrentQueue を使用して固定サイズの履歴キューを実装するにはどうすればよいですか?

ConcurrentQueue を使用して固定サイズの履歴キューを実装するにはどうすればよいですか?

DDD
DDDオリジナル
2025-01-13 10:00:19824ブラウズ

How Can I Implement a Fixed-Size History Queue Using ConcurrentQueue?

固定サイズの履歴管理のための ConcurrentQueue の拡張

System.Collections.Concurrent.ConcurrentQueue は、マルチスレッド環境でキューを管理するための強力なツールです。 ただし、本質的に固定サイズの制限はサポートされていません。キューがいっぱいになっても、古いエントリは自動的に削除されません。

FixedSizedQueue ソリューションの紹介

この制限を克服するために、FixedSizedQueue ラッパー クラスを構築します。このクラスは、新しい挿入時に古い要素を自動的にデキューするための ConcurrentQueue の機能を強化します。

実装戦略

FixedSizedQueue は、スレッドセーフのためにプライベート ConcurrentQueue インスタンスとロック オブジェクトをカプセル化します。 Enqueue メソッドはキューの Count をチェックします。事前定義された Limit を超える場合、メソッドはロックを取得し、CountLimit を下回るまで要素を繰り返しデキューします。

実際の応用

FixedSizedQueue を利用するには、目的の Limit で初期化します:

<code class="language-csharp">FixedSizedQueue<string> urlQueue = new FixedSizedQueue<string>(100);</code>

新しい URL の追加 (および古い URL の自動的な削除) は簡単です。

<code class="language-csharp">urlQueue.Enqueue("example.com");</code>

特典

FixedSizedQueue は、固定サイズの履歴データを管理するための合理的かつ効率的なアプローチを提供します。最新のエントリを優先し、古いエントリを自動的に破棄します。これは、ストレージが限られているシナリオや、特定の数の最近のイベントを追跡することが重要な場合に最適です。

以上がConcurrentQueue を使用して固定サイズの履歴キューを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。