• myrfy
    2020-11-06
    恰好老婆大人是做芯片MMU相关工作的,咨询了一下她,她告诉我现代的CPU基本上都在硬件层面保证了多核之间数据视图的一致性,也就是说普通的LOAD/STORE命令在硬件层面处理器就可以保证cache的一致性。如果是这样的话,那是不是可以理解为atomic包对指针的作用,主要是防止编译器做指令重排呢?因为编译器在这些现代架构上没必要使用特殊的指令了。 如果不止这样,麻烦老师指正,晚上回去和老婆大人再深入交流交流……

    作者回复: atomic主要是对这几种cpu架构的封装。你老婆是对的,你可以好好请教一下你老婆

    共 10 条评论
    38
  • 端贺
    2020-11-14
    晁老师的内功真是深厚,整个系列读下来还是有点吃力的,尤其是文中推荐的外链,需要多花点时间好好消化,感谢晁老师。

    作者回复: 加油!!!赞你认真的态度

    共 2 条评论
    5
  • 末班车
    2020-11-06
    老师您好,之前在用atomic的时候,疑惑为啥没有提供it int16的相关方法,这是不是也跟内存对齐有关系啊?

    作者回复: Go官方运行时只支持32bit/64bit系统,最小支持单位就是32bit

    
    3
  • Geek_921929
    2021-09-21
    晁老师,go包 cas针对ABA问题有啥封装吗,度学堂看到你的直播了哈哈,然后后来回放找不到了

    作者回复: 没有。aba问题是应用层自己解决的,比如用version

    
    2
  • 赵敷
    2022-12-05 来自北京
    晁老师你好,我有几个问题想向你请求一下。第一点,go的原子操作,是否有禁止指令重排的作用。即有一个func代码如下: var s1 int32 var s2 int32 var s3 int var s4 int func f() { 1: atomic.StoreInt32(&s1,1) 2: s3=1 3: atomic.StoreInt32(&s2,1) 4: s4 = 1 } 我想问一下1指令一定在3指令之前执行吗,另外2指令一定在s4指令之前执行吗。另外在内存模型上,我知道原子操作底层会遵循MESI模型来保证数据在多核缓存的一致性,我想知道多线程访问上面f函数,当我们在一个协程里观测到3指令已经执行,是否可以认为2也已经执行(如果3不是原子操作,我知道这一点肯定无法保证),2对内存的访问结果,对观测线程是否可见。也就是说添加原子指令的位置,会添加内存屏障,但是对于写内存屏障,是该屏障之前所有写操作都会刷新到内存,还是只是针对那个store的原子变量会刷新到内存,其他普通写操作还是继续写到cache中,逐级淘汰到内存中

    作者回复: 我的理解只会对那个store的变量刷新。

    
    
  • 强庚
    2022-10-13 来自北京
    atomic.Load系列的原子操作具体作用是什么呢?比如if atomic.LoadInt32(&a) == 1 如果直接写成if a== 1这样有什么问题吗

    作者回复: 保证别的地方的对a写你能感知到

    
    
  • 小袁
    2021-04-23
    atomic.Value是怎样实现的呢?这里为啥可以支持任意的数据?用Pointer类型不香么?

    作者回复: 这不就是为了便利性嘛

    共 2 条评论
    
  • Fan
    2020-12-24
    老师,执行这条命令,报错是什么意思,怎样解决? $ GOARCH=amd64 go tool objdump -gnu main.o flag provided but not defined: -gnu usage: go tool objdump [-S] [-s symregexp] binary [start end] -S print go code alongside assembly -s string only dump symbols matching this regexp

    作者回复: 升级go版本

    
    
  • SuperDai
    2020-11-12
    老师,无锁队列对消费者数量和生产者数量是不是有要求?是不是要求消费者数量为1还是生产者数量为1?

    作者回复: 没有要求,但我个人觉得数量不易过大

    共 2 条评论
    
  • SuperDai
    2020-11-12
    老师,无锁队列对消费者数量和生产者数量是不是有要求?是不是要求消费者数量为1还是生产者数量为1?

    作者回复: 没有要求

    
    