Sobes.tech
Middle

Czym jest Mutex?

sobes.tech AI

Odpowiedź od AI

Mutex (wzajemne wykluczanie) to mechanizm synchronizacji w Go, który służy do zapobiegania jednoczesnemu dostępowi wielu gorutyn do wspólnych zasobów, takich jak zmienne czy struktury danych. Mutex gwarantuje, że w każdym momencie tylko jedna gorutyna może posiadać blokadę i wykonywać sekcję krytyczną kodu.

Przykład użycia sync.Mutex w Go:

import (
    "fmt"
    "sync"
)

func main() {
    var mu sync.Mutex
    licznik := 0

    zwieksz := func() {
        mu.Lock()           // zdobycie blokady
        defer mu.Unlock()   // zwolnienie blokady
        licznik++
    }

    var wg sync.WaitGroup
    for i := 0; i < 1000; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            zwieksz()
        }()
    }
    wg.Wait()
    fmt.Println("Licznik:", licznik)
}

Bez Mutex wynik może być niepoprawny z powodu warunków wyścigu.