Назад к задачам
Junior — Senior
11

Синхронизация goroutine через sync.WaitGroup

Компании, где спрашивали:

YadroYadro
Получайте помощь с лайвкодингом в реальном времени с Sobes Copilot
Условие задачи

В приведённом примере несколько горутин одновременно изменяют одну и ту же карту 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])
}