Sobes.tech
Junior — Middle

Czy mógłbyś wyjaśnić zasadę działania mutexa i jego zastosowanie w programach wielowątkowych?

sobes.tech AI

Odpowiedź od AI

Mutual exclusion (Mutex) to mechanizm synchronizacji, który jest używany do zapobiegania jednoczesnemu dostępowi wielu wątków do wspólnego zasobu (np. zmiennej lub pliku). Mutex zapewnia, że w każdym momencie tylko jeden wątek może posiadać blokadę i wykonywać sekcję krytyczną kodu.

Zasada działania:

  • Wątek próbuje zdobyć mutex przed wejściem do sekcji krytycznej.
  • Jeśli mutex jest wolny, wątek uzyskuje dostęp i kontynuuje.
  • Jeśli mutex jest zajęty przez inny wątek, bieżący wątek jest blokowany i czeka na zwolnienie.
  • Po zakończeniu pracy z zasobem, wątek zwalnia mutex, umożliwiając innym wątkom kontynuację.

W Go jest to realizowane przez typ sync.Mutex:

var mu sync.Mutex
var counter int

func increment() {
    mu.Lock()         // zdobycie mutex
    counter++         // sekcja krytyczna
    mu.Unlock()       // zwolnienie mutex
}

Użycie mutex zapobiega warunkom wyścigu i zapewnia poprawność danych podczas równoległego wykonywania.