Sobes.tech
Junior — Middle

Zajišťuje tento pole bezpečnost při použití v prostředí s více vlákny?

sobes.tech AI

Odpověď od AI

V Go jsou běžné řezy (pole s dynamickou velikostí) výchozí nejsou bezpečné pro vlákna. Pokud několik gorutin současně čte a zapisuje do stejného řezu bez synchronizace, dojde ke konkurenčním podmínkám a nepředvídatelnému chování.

Pro zajištění bezpečnosti v prostředí s více vlákny je třeba používat:

  • Zámky (sync.Mutex) k zablokování přístupu při změně řezu.
  • Kanály (chan) pro přenos dat mezi gorutinami.
  • Specializované datové struktury z balíčku sync nebo externích knihoven.

Příklad s mutexem:

var mu sync.Mutex
var slice []int

func appendSafe(val int) {
    mu.Lock()
    defer mu.Unlock()
    slice = append(slice, val)
}

Bez těchto opatření není pole bezpečné pro paralelní použití.