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

Конкурентный вывод уникальных элементов среза

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

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

Дан срез целых чисел: values := []int{3, 3, 2, 1, 2, 1, 1, 2, 4}. Необходимо напечатать каждый различный элемент ровно один раз, используя несколько горутин. Порядок вывода не важен, главное – отсутствие повторов. В исходном примере происходит гонка данных при записи в обычную map, что приводит к некорректному результату. Нужно исправить код, обеспечив безопасный конкурентный доступ к общей структуре (например, через mutex или sync.Map).

func main() {
 values := []int{3, 3, 2, 1, 2, 1, 1, 2, 4}
 var idx map[int]struct{}

 for _, v := range values {
  go func() {
   if _, ok := idx[v]; ok {
    return
   }
   idx[v] = struct{}{}
   log.Println(v)
  }()
 }
}