温馨提示×

c# set怎样确保线程安全

c#
小樊
81
2024-11-16 14:17:40
栏目: 编程语言

在C#中,要确保HashSet<T>的线程安全,可以使用ConcurrentDictionary<TKey, TValue>类来代替HashSet<T>ConcurrentDictionary<TKey, TValue>是线程安全的,可以在多个线程之间安全地存储和访问键值对。

以下是一个使用ConcurrentDictionary<TKey, TValue>的示例:

using System;
using System.Collections.Concurrent;
using System.Threading;

class Program
{
    static ConcurrentDictionary<int, string> concurrentSet = new ConcurrentDictionary<int, string>();

    static void Main(string[] args)
    {
        Thread t1 = new Thread(() => AddToSet(1, "one"));
        Thread t2 = new Thread(() => AddToSet(2, "two"));
        Thread t3 = new Thread(() => AddToSet(3, "three"));

        t1.Start();
        t2.Start();
        t3.Start();

        t1.Join();
        t2.Join();
        t3.Join();

        Console.WriteLine("ConcurrentSet contains: " + string.Join(", ", concurrentSet));
    }

    static void AddToSet(int key, string value)
    {
        concurrentSet.AddOrUpdate(key, value, (k, v) => value);
    }
}

在这个示例中,我们使用ConcurrentDictionary<int, string>AddOrUpdate方法来添加或更新集合中的元素。这个方法会在添加新元素或更新现有元素时执行指定的操作。在这个例子中,我们只是简单地将新值设置为旧值。

通过使用ConcurrentDictionary<TKey, TValue>,我们可以确保在多个线程之间对集合的操作是线程安全的。

0