Sobes.tech
Junior — Middle

Можете ли да обясните принципа на работа на mutex и неговото използване в многопоточни програми?

sobes.tech AI

Отговор от AI

Mutual exclusion (Mutex) — това е механизъм за синхронизация, който се използва за предотвратяване на едновременен достъп на няколко нишки до споделен ресурс (например променлива или файл). Mutex гарантира, че във всеки момент само една нишка може да притежава блокировката и да изпълнява критичната секция на кода.

Принцип на работа:

  • Нишката се опитва да придобие mutex преди да влезе в критичната секция.
  • Ако mutex е свободен, нишката получава достъп и продължава.
  • Ако mutex е зает от друга нишка, текущата нишка се блокира и чака освобождаване.
  • След като приключи с ресурса, нишката освобождава mutex, позволявайки на други нишки да продължат.

В Go това се реализира чрез типа sync.Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()         // заключване на mutex
    counter++         // критична секция
    mu.Unlock()       // отключване на mutex
}

Използването на mutex предотвратява състезателни условия и осигурява коректност на данните при паралелно изпълнение.