Junior — Middle
Каква роля изпълняват примитивите за синхронизация в езика за програмиране Go?
sobes.tech AI
Отговор от AI
Primitive-те за синхронизация в Go се използват за управление на достъпа до споделени ресурси и за координиране изпълнението на goroutine-ите, за да се избегнат състезателни условия и да се гарантира коректността на програмата.
Основни примитиви:
- Mutex (sync.Mutex) — осигурява взаимно изключване, позволявайки само на една goroutine да изпълнява критичната секция едновременно.
- WaitGroup (sync.WaitGroup) — позволява да се чака завършването на група goroutine-и.
- Канал — канал за предаване на данни между goroutine-и, който сам по себе си е мощен примитив за синхронизация.
- RWMutex (sync.RWMutex) — позволява на няколко goroutine-а да четат данни едновременно, но записът блокира всички.
Пример за използване на Mutex:
var mu sync.Mutex
var брояч int
func увеличи() {
mu.Lock()
defer mu.Unlock()
брояч++
}
По този начин, примитивите за синхронизация помагат да се избегнат конфликти при паралелен достъп до данни и осигуряват правилно взаимодействие между goroutine-ите.