1
b := 2
go func() {
a = 3
b = 4
}()
// любое действие или никакого
//time.Sleep(0)
//time.Sleep(N)
//runtime.Gosched()
fmt.Printf("a = %d\n", a)
fmt.Printf("b = %d\n", b)
}
Какие возможны варианты вывода? Все возможные варианты нужно написать. Я ответил, но неправильно)
Мне кажется три варианта возможно - a = 1,b = 2/a = 3,b = 2/a = 3,b = 4
а = 1, b = 4 забыли, во второй рутине может быть реордеринг, потому что это не влияет на логику исполнения в рамках одной рутины, и тут операции с разными переменными, поэтому гарантии happens before нет
Вообще я готов поверить, что компилятор может поменять местами строки в данном случае. Так что в теории b может измениться первее а
А может он быть? Все таки там простые целые числа, они по идее в стеке должны лежать, не?
ох не стал бы я думать про стек
Шах и мат https://play.golang.org/p/SgmleapllZe
А теперь вообще 1 и 2 Короче не докажете ибо не повторить😺
https://prnt.sc/10o87nq У меня 1 и 4 стабильно
https://play.golang.org/p/Qk4l6vl0mDR
Обсуждают сегодня