ホームページ > バックエンド開発 > C++ > .NET Framework で同時実行 HashSet を実装するにはどうすればよいですか?

.NET Framework で同時実行 HashSet を実装するにはどうすればよいですか?

DDD
リリース: 2025-01-09 07:10:45
オリジナル
448 人が閲覧しました

How to Implement a Concurrent HashSet in the .NET Framework?

.NET Framework で同時実行 HashSet を実装していますか?

紹介:

.NET Framework は同時実行 HashSet の組み込み実装を提供していないため、同時データ構造を扱う開発者にとっては課題となる可能性があります。この記事では、同時実行 HashSet の必要性を探り、.NET Framework で HashSet へのスレッドセーフなアクセスを実装するさまざまな方法を検討します。

カスタム スレッド セーフティ実装:

1 つのアプローチは、カスタムのスレッドセーフな HashSet 実装を作成することです。これは、既存の HashSet を同期メカニズム (ロックなど) でラップすることで実現できます。次のコード スニペットは、この実装を示しています:

<code class="language-C#">public class ConcurrentHashSet<T>
{
    private readonly HashSet<T> _hashSet = new HashSet<T>();
    private readonly object _syncRoot = new object();

    public bool Add(T item)
    {
        lock (_syncRoot)
        {
            return _hashSet.Add(item);
        }
    }

    public bool Remove(T item)
    {
        lock (_syncRoot)
        {
            return _hashSet.Remove(item);
        }
    }

    // 其他操作可以类似地实现
}</code>
ログイン後にコピー

ConcurrentDictionary を使用:

もう 1 つの方法は、System.Collections.Concurrent 名前空間の ConcurrentDictionary クラスを利用することです。 HashSet とまったく同じ機能は提供しませんが、同様のセマンティクスを持つスレッドセーフな辞書を提供します。キーと値のペア (キーは HashSet 内の要素、値はダミー値) を使用することで、同時実装を実現できます。

<code class="language-C#">private ConcurrentDictionary<T, byte> _concurrentDictionary = new ConcurrentDictionary<T, byte>();

public bool Add(T item)
{
    byte dummyValue = 0;
    return _concurrentDictionary.TryAdd(item, dummyValue);
}

public bool Remove(T item)
{
    byte dummyValue;
    return _concurrentDictionary.TryRemove(item, out dummyValue);
}

// 其他操作可以类似地实现</code>
ログイン後にコピー

注:

方法を選択するときは、次の要素を考慮してください:

  • 同時実行の安全性: どちらのメソッドも、基礎となるデータ構造へのスレッドセーフなアクセスを提供します。
  • パフォーマンス: 場合によっては、カスタム実装のパフォーマンスが ConcurrentDictionary よりも優れている場合があります。
  • シンプルさ: ConcurrentDictionary は、よりシンプルで直接的な実装を提供します。
  • HashSet の適用性: ConcurrentDictionary は HashSet から継承しないため、一部の HashSet 固有の機能が失われる可能性があります。

結論: .NET Framework における

同時 HashSets

の必要性は、カスタム スレッド セーフ ラッパーを実装するか、ConcurrentDictionary を使用することで解決できます。この 2 つのどちらを選択するかは、アプリケーションの特定の要件と上記のトレードオフによって決まります。

以上が.NET Framework で同時実行 HashSet を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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