Go happens before

2021-06-10  本文已影响0人  夜空中乄最亮的星

happens before:

为什么需要happens before:

编译器或处理器不保证指令执行顺序和程序书写顺序一致,同时读写变量由于变量体积不同,也不一定是原子性的。

在Go语言中有哪些可以建立happens before关系的同步事件:

  1. 对channel的关闭先行发生于接收到0值,因为channel已经被关闭了。
  2. 无缓冲channel的接收先行发生于发送完成
  3. 在容量为C的channel上的第k个接收先行发生于从这个channel上的第k+C次发送完成
  1. 对任意的sync.Mutex或sync.RWMutex变量l和n < m,n次调用l.Unlock()先行发生于m次l.Lock()返回
  2. 对于sync.RWMutex变量l,任意的函数调用l.RLock满足第n次l.RLock后发生于第n次调用l.Unlock,对应的l.RUnlock先行发生于第n+1次调用l.Lock
上一篇下一篇

猜你喜欢

热点阅读