golang Tips之原子切换指针

先上代码:

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之前, 也就是类型转换的时候, 会不会指针已经发生变化了, 导致原子操作失效.
    答: 不会.
    类型转换是在编译时候做的, 运行时候不会使指针发生改变.

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 307、setValue:forKey和setObject:forKey的区别是什么? 答:1, setObjec...
    AlanGe阅读 1,722评论 0 1
  • 接着上节 mutex,本节主要介绍atomic的内容,练习代码地址。本文参考http://www.cplusplu...
    jorion阅读 74,103评论 1 14
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,626评论 30 472
  • 转至元数据结尾创建: 董潇伟,最新修改于: 十二月 23, 2016 转至元数据起始第一章:isa和Class一....
    40c0490e5268阅读 2,069评论 0 9
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 2,253评论 0 7

友情链接更多精彩内容