Для чего используется atomic?



Ответ



atomic - предоставляет набор атомарных функций, реализованных на аппаратном уровне. Это позволяет избегать гонки данных без блокировок. Вместе с этим, с помощью atomic в отличие от mutex можно делать только простые вещи, к примеру инкрементировать различные счетчики. Немного пояснений про атомарность: функция будет атомарной, если она завершается в один шаг по отношению ко всем другим потокам, которые имеют доступ к обрабатываемой памяти.



func main() {

var (

counter uint64

wg sync.WaitGroup

)



for i := 0; i < 10; i++ {

wg.Add(1)



go func() {

for c := 0; c < 1000; c++ {

atomic.AddUint64(&counter, 1)

}

wg.Done()

}()

}



wg.Wait()



fmt.Println("counter:", counter)

}




Вывод



counter: 10000



@golang_interview