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

Синхронный доступ к общей map в Go

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

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

В программе объявлена глобальная карта map[string]int, к которой из разных горутин одновременно выполняются операции чтения и записи. При этом приложение падает с ошибкой fatal error: concurrent map read and map write. Необходимо подобрать подходящий механизм синхронизации, который устранит эту проблему.

package main

import (
 "fmt"
 "sync"
 "time"
)

var (
 mu sync.RWMutex
 m  = map[string]int{"a": 1}
)

func main() {
 go read()
 time.Sleep(1 * time.Second)
 go write()
 time.Sleep(1 * time.Second)
}

func read() {
 for {
  mu.RLock()
  fmt.Println(m["a"])
  mu.RUnlock()
 }
}

func write() {
 for {
  mu.Lock()
  m["a"] = 2
  mu.Unlock()
 }
}