第 5 章:Go 内存模型与 Happens-Before 原则
5.1 前言
Go 语言的内存模型(Memory Model)规定了:一个 goroutine 在何种条件下,能够看到另一个 goroutine 对同一变量的修改结果。这类似于 Java 内存模型(JMM)所讨论的内存可见性问题。
当多个 goroutine 并发访问同一数据时,为了保证读写顺序的正确性,必须对并发操作进行顺序化约束。在 Go 中,可以实现这种顺序化的工具包括:
-
高级通信原语:channel(通道);
-
低级同步原语 :
sync.Mutex(互斥锁)、sync.RWMutex(读写锁); -
原子操作 :
sync/atomic包中的原子读写函数。
本章我们将从理论层面理解 Go 内存模型的核心------Happens-Before 原则,并通过具体示例说明其在初始化、goroutine 创建和销毁场景中的应用。