Golang atomi c .StorePointer (...) ведет себя странно - PullRequest
0 голосов
/ 16 апреля 2020

Пытался поиграть с пакетом 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

Что я сделал не так?

1 Ответ

1 голос
/ 16 апреля 2020

Правильный путь: https://play.golang.org/p/__P_5E4di79

Фактически, необходимая функция ** int приведена к * unsafe.Pointer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...