Sobes.tech
Back to questions
Junior — Middle
63

Как системы обрабатывают ситуацию, когда несколько потоков одновременно обращаются к общей переменной или состоянию?

Answer from AI

sobes.tech AI

Когда несколько потоков одновременно обращаются к общей переменной или состоянию, возникает проблема состояния гонки (race condition). Чтобы избежать некорректных данных и обеспечить корректность, применяют механизмы синхронизации:

  • Блокировки (lock, mutex) — позволяют одному потоку эксклюзивно владеть ресурсом, другие ждут.
  • Мониторы (Monitor.Enter/Exit в C#) — более гибкий механизм блокировок.
  • Ключевое слово lock в C# — упрощённый синтаксис для монитора.
  • Атомарные операции (Interlocked) — для простых операций без полной блокировки.
  • Concurrent коллекции — потокобезопасные структуры данных.

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

private readonly object _sync = new object();
private int _counter = 0;

public void Increment()
{
    lock(_sync)
    {
        _counter++;
    }
}

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