Расскажи про memory model Go

Senior
162 просмотров
AFK Offer AI

Memory model Go определяет при каких условиях чтение переменной в одной горутине гарантированно увидит запись из другой. Без синхронизации компилятор и процессор могут переупорядочить операции, и ты увидишь устаревшие данные. Гарантии дают: запуск горутины, операции с каналами, mutex Lock/Unlock, sync.Once, atomic операции. Если happens-before нет — поведение undefined.

Следующий вопрос

Что выведет: var wg sync.WaitGroup; for i := 0; i < 3; i++ { wg.Add(1); go func() { defer wg.Done(); fmt.Println(i) }() }; wg.Wait()?