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