Итерирование карт в Go Routines? - PullRequest
0 голосов
/ 07 февраля 2019

Я вижу некоторую «фатальную ошибку: параллельная итерация карты и запись карты» в некотором старом коде, написанном некоторое время назад.Я пытался диагностировать проблему, и я наткнулся на блок кода, похожий на ссылку ниже игровой площадки.

Мне кажется неправильным повторять возвращаемую карту (которая передается по ссылке) дажеесли он возвращается в функции с блокировкой.

Я искал объяснение того, почему это, похоже, не вызывает вышеуказанную ошибку.

Я понимаю, что сейчас есть RWMutex и карты синхронизации, но этот код был написан некоторое время назад, и я ищу объяснение функциональности, а не улучшений.

https://play.golang.org/p/_RY-QAyGE2W

Я бы предположил, что приведенный выше код выдаст «фатальную ошибку: параллельная итерация карты и запись карты», однако, похоже, что он работает без проблем.

1 Ответ

0 голосов
/ 07 февраля 2019

Это иллюстрирует это лучше: https://play.golang.org/p/RiWTxBoNqwD Он не будет работать на игровой площадке, но он сразу же вылетает, если вы запустите его из командной строки.

Итерация карты неНе защищен мьютексом.Защищен только акт возврата ссылки на карту.

Это делает почти то же самое, но мьютекс защищает всю итерацию: https://play.golang.org/p/cQNs3x_k-SL или это https://play.golang.org/p/ydjprgvF6aE

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...