Sobes.tech
Junior — Middle

Jaké kroky je třeba podniknout s běžným slovníkem, aby se zabránilo použití vlákny bezpečné varianty ConcurrentDictionary?

sobes.tech AI

Odpověď od AI

Чтобы использовать обычный словарь (например, Dictionary<TKey, TValue>) в многопоточной среде без перехода на потокобезопасный ConcurrentDictionary, необходимо обеспечить синхронизацию доступа к словарю. Для этого можно:

  • Использовать блокировки (lock) вокруг всех операций чтения и записи в словарь.
  • Применять объекты синхронизации, например, Mutex или Monitor.

Пример с использованием lock:

private readonly Dictionary<int, string> dict = new Dictionary<int, string>();
private readonly object dictLock = new object();

public void AddItem(int key, string value)
{
    lock(dictLock)
    {
        dict[key] = value;
    }
}

public bool TryGetValue(int key, out string value)
{
    lock(dictLock)
    {
        return dict.TryGetValue(key, out value);
    }
}

Таким образом, вы предотвращаете одновременный доступ из разных потоков, избегая состояния гонки и исключений.