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.