Однозначного вывода нет: конкурентные записи в обычную map образуют data race и могут завершить процесс fatal error. Sleep не синхронизирует горутины.
Какой вывод получим при запуске программы №60
Однозначного вывода нет: конкурентные записи в обычную map образуют data race и могут завершить процесс fatal error. Sleep не синхронизирует горутины.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разберём, какой текст будет напечатан в консоль после выполнения следующей Go‑программы:
import ("fmt"
"time")
func main() {
{
sharedMap := make(map[int]bool)
go func() {
sharedMap[1] = true
}()
go func() {
sharedMap[1] = true
}()
go func() {
sharedMap[1] = false
}()
time.Sleep(1 * time.Second)
fmt.Println("%v", sharedMap[1])
}
}
Вопрос: какое значение будет выведено на экран?
Ответ
Однозначного вывода нет: конкурентные записи в обычную map образуют data race и могут завершить процесс fatal error. Sleep не синхронизирует горутины.
Даже если аварии не произошло, порядок записей true/false не определён. Кроме того, fmt.Println не интерпретирует %v как формат: он напечатает его буквально перед значением. Для исправления защищайте все обращения одним mutex и ждите завершения через WaitGroup. Если нужен конкретный итог, задайте порядок операций или правило объединения результатов.