SortedDictionary
是基于 SortedList
实现的,它根据键的键值对进行排序。在多线程环境下,SortedDictionary
不是线程安全的。如果多个线程同时访问和修改 SortedDictionary
,可能会导致数据不一致和其他未定义的行为。
如果需要在多线程环境下使用 SortedDictionary
,可以使用以下方法:
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];
}
}
ConcurrentDictionary
类,它是一个线程安全的字典实现。虽然 ConcurrentDictionary
不提供排序功能,但你可以通过维护一个额外的 SortedSet
或 List<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;
}
请注意,这种方法可能会导致额外的维护成本,因为需要同步两个数据结构。