Пытался поиграть с пакетом atomi c и получил довольно странное поведение, вероятно, не понимал спецификации ...
Детская площадка: https://play.golang.org/p/oPeqwETBpuZ
Код:
func main() {
x := 1
y := 2
xp := &x
yp := &y
fmt.Println("xp before: ", xp)
fmt.Println("yp before: ", yp)
xpu := (unsafe.Pointer)(xp)
ypu := (unsafe.Pointer)(yp)
atomic.StorePointer(&xpu, ypu)
fmt.Println("xp after: ", xp)
fmt.Println("yp after: ", yp)
}
Вывод:
xp before: 0xc000100010
yp before: 0xc000100018
xp after: 0xc000100010
yp after: 0xc000100018
Ожидается:
xp before: 0xc000100010
yp before: 0xc000100018
xp after: 0xc000100018
yp after: 0xc000100018
Что я сделал не так?