Sobes.tech
Junior — Middle

Jak jest realizowany mechanizm wzajemnego wykluczania za pomocą Mutex w języku Go?

sobes.tech AI

Odpowiedź od AI

W języku Go do implementacji wzajemnego wykluczenia (mutex) używa się typu sync.Mutex. Pozwala on chronić krytyczne sekcje kodu przed jednoczesnym dostępem z wielu gorutyn, zapobiegając warunkom wyścigu.

Główne operacje:

  • Lock() — blokuje mutex, uniemożliwiając innym gorutynom dostęp.
  • Unlock() — odblokowuje mutex, pozwalając innym gorutynom kontynuować.

Przykład użycia:

package main

import (
    "fmt"
    "sync"
)

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

    mu.Lock() // Zabezpiecza mutex
    counter++
    fmt.Println("Licznik:", counter)
    mu.Unlock() // Odblokowuje mutex
}

W środowiskach wielowątkowych mutex gwarantuje, że tylko jedna gorutyna wykonuje kod między Lock() a Unlock() na raz, co zapobiega nieprawidłowym zmianom danych współdzielonych.