Назад к задачам
YadroПолучайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Junior — Senior
11
Синхронизация goroutine через sync.WaitGroup
Компании, где спрашивали:
Условие задачи
В приведённом примере несколько горутин одновременно изменяют одну и ту же карту map[int]bool, что приводит к гонке данных. Чтобы гарантировать, что все изменения завершатся до того, как мы попытаемся прочитать значение из карты, необходимо воспользоваться sync.WaitGroup. Нужно добавить вызов Add() перед запуском горутин, вызвать Done() в конце каждой горутины и выполнить Wait() перед чтением карты. Укажите места вставки этих методов.
package main
import (
"fmt"
"time"
)
func main() {
data := make(map[int]bool)
go func() {
data[1] = true
}()
go func() {
data[1] = true
}()
go func() {
data[1] = false
}()
time.Sleep(1 * time.Second)
fmt.Printf("%v", data[1])
}