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;
}
請注意,這種方法可能會導致額外的維護成本,因為需要同步兩個數據結構。