c#

c# sorteddictionary能并发吗

小樊
81
2024-11-23 01:25:06
栏目: 编程语言

SortedDictionary 是基于 SortedList 实现的,它根据键的键值对进行排序。在多线程环境下,SortedDictionary 不是线程安全的。如果多个线程同时访问和修改 SortedDictionary,可能会导致数据不一致和其他未定义的行为。

如果需要在多线程环境下使用 SortedDictionary,可以使用以下方法:

  1. 使用 lock 语句或 Monitor 类来确保在同一时间只有一个线程访问 SortedDictionary。这种方法可能会导致性能下降,因为线程需要等待锁释放。
private readonly object _lock = new object();
private SortedDictionary<int, string> _sortedDictionary = new SortedDictionary<int, string>();

public void Add(int key, string value)
{
    lock (_lock)
    {
        _sortedDictionary.Add(key, value);
    }
}

public string Get(int key)
{
    lock (_lock)
    {
        return _sortedDictionary[key];
    }
}
  1. 使用 ConcurrentDictionary 类,它是一个线程安全的字典实现。虽然 ConcurrentDictionary 不提供排序功能,但你可以通过维护一个额外的 SortedSetList<KeyValuePair<TKey, TValue>> 来实现排序。
private readonly SortedSet<KeyValuePair<int, string>> _sortedSet = new SortedSet<KeyValuePair<int, string>>();
private readonly ConcurrentDictionary<int, string> _concurrentDictionary = new ConcurrentDictionary<int, string>();

public void Add(int key, string value)
{
    var entry = new KeyValuePair<int, string>(key, value);
    _sortedSet.Add(entry);
    _concurrentDictionary.TryAdd(key, value);
}

public string Get(int key)
{
    if (_concurrentDictionary.TryGetValue(key, out var value))
    {
        return value;
    }
    return null;
}

请注意,这种方法可能会导致额外的维护成本,因为需要同步两个数据结构。

0
看了该问题的人还看了