Я новичок в языке Go, поэтому, пожалуйста, извините меня, если мой вопрос очень прост. Я написал очень простой код:Как goroutines ведут себя на многоядерном процессоре
func main(){
var count int // Default 0
cptr := &count
go incr(cptr)
time.Sleep(100)
fmt.Println(*cptr)
}
// Increments the value of count through pointer var
func incr(cptr *int) {
for i := 0; i < 1000; i++ {
go func() {
fmt.Println(*cptr)
*cptr = *cptr + 1
}()
}
}
Значение счетчика должно увеличиваться на единицу количеством циклов цикла Рассмотрим случаи:
Loop работает 100 раз -> значение count равно 100 (это верно, поскольку цикл работает 100 раз).
Loop работает на> 510 раз -> Значение счетчика либо 508 или 510. Это происходит, даже если это 100000.
Я бегу это на процессорной машине 8 сердечника.
Ссылка на модель памяти на самом деле довольно приятная и очищает многие вещи. – Nerve