Golang 并发赋值的安全性探讨

50 阅读1分钟

t.csdnimg.cn/5XX8a

总结并发赋值

  1. 一条机器指令完成赋值的类型,并发赋值是安全的,这些类型有:字节型,布尔型、整型、浮点型、字符型、指针、函数。
  2. 数组由一个或多个元素组成,大部分情况并发不安全。注意:当位宽不大于 64 位且是 2 的整数次幂(8,16,32,64),那么其并发赋值是安全的。
  3. struct 或底层是 struct 的类型并发赋值大部分情况并发不安全,这些类型有:复数、字符串、 数组、切片、映射、通道、接口。注意:当 struct 赋值时退化为单个字段由一个机器指令完成赋值时,并发赋值又是安全的。这种情况有: (a)实部或虚部相同的复数的并发赋值;
    (b)等长字符串的并发赋值;
    (c)同长度同容量切片的并发赋值
    (d)同一种具体类型不同值并发赋给接口。