Sobes.tech
Junior — Middle

Jak je implementován mechanismus vzájemného vyloučení pomocí Mutex v jazyce Go?

sobes.tech AI

Odpověď od AI

V jazyce Go se pro implementaci vzájemného vyloučení (mutex) používá typ sync.Mutex. Umožňuje chránit kritické sekce kódu před současným přístupem z více gorutin a zabraňuje závodním podmínkám.

Hlavní operace:

  • Lock() — zamkne mutex, zabrání přístupu dalších gorutin.
  • Unlock() — odemkne mutex, umožní pokračování ostatním gorutinám.

Příklad použití:

package main

import (
    "fmt"
    "sync"
)

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

    mu.Lock() // Zamkne mutex
    counter++
    fmt.Println("Čítač:", counter)
    mu.Unlock() // Odemyká mutex
}

V prostředí s více vlákny garantuje mutex, že pouze jedna gorutina vykoná kód mezi Lock() a Unlock() najednou, čímž se zabrání nesprávným změnám sdílených dat.