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
syncnebo 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í.