Sobes.tech
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++;
    }
}

Този подход гарантира, че само една нишка променя променливата в даден момент.