ホームページ > バックエンド開発 > C++ > .NET でスレッドセーフな HashSet 操作を実現するにはどうすればよいですか?

.NET でスレッドセーフな HashSet 操作を実現するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-09 07:14:48
オリジナル
898 人が閲覧しました

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

.NET のスレッドセーフな HashSet 代替手段

この記事では、.NET で HashSet コレクションを管理するためのスレッドセーフなアプローチを検討し、手動ロックの代替手段を提供します。 この例では、 HashSet 操作にカスタム ロックを使用しています。これは有効ですが、エラーが発生しやすい方法です。 より良いオプションを検討してみましょう。

.NET フレームワークは、優れたソリューションとして ConcurrentDictionary 名前空間内に System.Collections.Concurrent クラスを提供します。 ConcurrentDictionary はスレッドセーフなハッシュ テーブル機能を提供し、同時読み取りと書き込みを効率的に処理します。 使用方法は次のとおりです:

<code class="language-csharp">private ConcurrentDictionary<string, byte[]> _data;</code>
ログイン後にコピー

または、カスタム ConcurrentHashSet クラスを作成することもできます。このアプローチには、スレッドの安全性を保証するための内部ロック機構が含まれます。 サンプル実装を以下に示します:

<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>
ログイン後にコピー

(注: ... は、簡潔にするために元の例のコードをここに挿入する必要があることを示します)。

ConcurrentDictionary または適切に実装された ConcurrentHashSet を使用すると、コードの明瞭さが大幅に向上し、手動ロックと比較して同期エラーのリスクが軽減されます。 これらの組み込みソリューションは、パフォーマンスとスレッドの安全性を考慮して最適化されています。

以上が.NET でスレッドセーフな HashSet 操作を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート