Найди баг в этом concurrent коде

Middle
288 просмотров
AFK Offer AI

Типичный пример: var count int; var wg sync.WaitGroup; for i := 0; i < 1000; i++ { wg.Add(1); go func() { count++; wg.Done() }() }; wg.Wait(); fmt.Println(count). Баг — data race на count. Без синхронизации count++ не атомарная операция (read-modify-write). Результат недетерминирован, может быть меньше 1000. Фикс: atomic.AddInt64 или mutex. go run -race поймает это. На собесе дают код и просят найти проблему — тренирует глаз на конкурентные баги.

Следующий вопрос

Как спроектировать search engine?