Могу ли я обновить карту Голанга одновременно? - PullRequest
0 голосов
/ 23 октября 2019

Все говорят, что одновременная запись / чтение карты Голанга небезопасно , но можем ли мы просто обновить ее, но не писать новые ключи?

Мы знаем, что приведенный ниже код вызовет fatal error: concurrent map read and map write.

var m = make(map[int]int)

for i := 0; i < 1000; i++ {
    go func() {
        m[i] = i
    }()
}

Теперь мне интересно, можем ли мы обновить карту одновременно, как показано ниже.

var m = make(map[int]int)

// init memory structure of map
for i := 0; i < 1000; i++ {
    m[i] = 0
}

// just update values for old keys concurrently
for i := 0; i < 1000; i++ {
    go func() {
        m[i] = i
    }()
}

Можем ли мы это сделать?

1 Ответ

4 голосов
/ 23 октября 2019

Можем ли мы это сделать?

Нет, конечно, нет. Он просто выдает ошибку времени выполнения «фатальная ошибка: одновременная запись карты» (буквально с вашим кодом, так что вы могли бы попробовать его сами).

Просто перестаньте бороться с языком и попытайтесь быть умным: Нет одновременных пишет (даже не "умных")!

...