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++;
}
}
Такой подход гарантирует, что только один поток изменяет переменную в момент времени.