Junior — Middle
Как системите обработват ситуацията, когато няколко нишки едновременно се обръщат към обща променлива или състояние?
sobes.tech AI
Отговор от AI
Когато няколко нишки едновременно достъпват обща променлива или състояние, възниква проблем с гонеща се състезателна условие (race condition). За да се избегнат неправилни данни и да се осигури коректност, се използват механизми за синхронизация:
- Блокировки (lock, mutex) — позволяват на една нишка да притежава изключителен достъп до ресурса, други чакат.
- Монитори (Monitor.Enter/Exit в C#) — по-гъвкав механизъм за блокиране.
- Ключовата дума
lockв C# — опростена синтаксис за монитори. - Атомарни операции (Interlocked) — за прости операции без пълно блокиране.
- Паралелни колекции — нишково безопасни структури от данни.
Пример с използване на lock в C#:
private readonly object _sync = new object();
private int _counter = 0;
public void Increment()
{
lock(_sync)
{
_counter++;
}
}
Този подход гарантира, че само едно нишка променя променливата в даден момент.