美文网首页Golang
golang Tips之原子切换指针

golang Tips之原子切换指针

作者: Lucas_Ye | 来源:发表于2017-07-18 16:12 被阅读307次

先上代码:

var data *string
p := (*string)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(&data))

有两个问题想讨论一下:

  1. unsafe.Pointer与*unsafe.Pointer可以直接转换么?
    答: 可以转换.
    根据测试, 结果为:
(unsafe.Pointer) 0xc42000e0a8
(*unsafe.Pointer)(0xc42000e0a8)(0xc4200115f8) // 0xc4200115f8为data实际地址
  1. 这个操作的目的是原子load一个指针, 在LoadPointer之前, 也就是类型转换的时候, 会不会指针已经发生变化了, 导致原子操作失效.
    答: 不会.
    类型转换是在编译时候做的, 运行时候不会使指针发生改变.

以上仅为个人理解, 也欢迎大家一起讨论.

相关文章

  • golang Tips之原子切换指针

    先上代码: var data *stringp := (*string)(atomic.LoadPointer((...

  • Golang基础(三)——复杂类型

    Golang基础(三)——复杂类型 @([07] golang)[Go总结] [TOC] 指针 定义 指针变量可以...

  • 19. Remove Nth Node From End of

    key tips 双指针 + thead法

  • Golang聚合

    教程 Go Web 编程Go语言圣经(中文版) Tips Golang 学习笔记——交叉编译 & 部署Golang...

  • golang Tips

    最后更新时间: 2017/06/12 增加5. golang 列出依赖的包 1. slice make时候如果le...

  • golang tips

    参考: Go的50度灰:Golang新开发者要注意的陷阱和常见错误 Traps, Gotchas, and Com...

  • Golang Tips

    Go的数组只能有固定的长度,传入变量作为数组长度时,只能创建为定义了size的切片 Go没有内置的比较整数大小的方...

  • 后端研发体系

    记录自己为了面试发现的文章 golang golang中都是值传递,没有引用传递,哪怕是指针,也是指针的值拷贝。 ...

  • 命令行快捷键

    ctrl A :指针切换到命令开头ctrl E: 指针切换到命令尾部删除整条命令:ctrl Q(指针不管在哪里...

  • golang指针

    关于指针,我的理解是这样的,它指向一个内存的地址,也就是某个类型在内存中存放的地方。 定义一个指针 var d *...

网友评论

    本文标题:golang Tips之原子切换指针

    本文链接:https://www.haomeiwen.com/subject/dojhkxtx.html