WaitGroup ждёт завершения, но не защищает read-modify-write. Используйте mutex вокруг инкремента или атомарное увеличение, а также согласованное чтение.
Как устранить гонку при увеличении общего счётчика
WaitGroup ждёт завершения, но не защищает read-modify-write. Используйте mutex вокруг инкремента или атомарное увеличение, а также согласованное чтение.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Две goroutines Go выполняют count++ над общей переменной, main читает результат после ожидания. Почему одного WaitGroup недостаточно и как исправить?
Ответ
WaitGroup ждёт завершения, но не защищает read-modify-write. Используйте mutex вокруг инкремента или атомарное увеличение, а также согласованное чтение.
Count++ состоит из чтения, изменения и записи, поэтому обновления могут потеряться. Для независимого счётчика подходит atomic.Int64; для нескольких связанных полей удобнее mutex. Проверяйте гонки соответствующим инструментом, но отсутствие обнаруженной гонки в одном запуске не является доказательством корректности всех путей.