译者序 Memory Barriers: a Hardware View for Software Hackers 是并发编程专家 Paul E. McKenney 的经典论文,该论文同时收录在他的著作 Is Parallel Programming Hard, And, If So, What Can You Do About It? 附录 C Why Memory Barriers? 中。 本文全文翻译该论文。 为什么中了邪的 CPU 设计者要让可怜的一无所知的软件设计者受内存屏障(memory barrier)的伤害? 简单地说,因为乱序内存引用可以带来更好的性能,所以需要用内存屏障在同步原语这类其正确操作依赖于排序的内存引用的东西中强制
简介 数据竞争是并发程序中最普遍和最难调试的 bug。当两个 goroutine 并发访问同一变量且至少一个访问是写时发生数据竞争。更多细节参考 The Go Memory Model。 译者注 The Go Memory Model 可以参考我的博客 【译】Go 语言内存模型:2022-06-06 版。 这有一个可以导致程序崩溃(crashes)和内存损坏(memory corruption)的数据竞争的例子: xian sxian sfunc main() { c := make(chan bool) m := make(map[string]string) go func() { m["1"] = "a" //
译者序 原文 The Go Memory Model 描述 Go 语言内存模型,这里的内存模型实际上是“内存一致性模型”(memory consistency model)。笔者修改了格式错误并翻译全文。 The Go Memory Model 在内存一致性模型层面,描述 Go 语言实现(Go implementation)提供的一致性保证,并进一步指出该保证对 Go 语言实现的限制;在工程实践层面,描述使用同步原语确保 goroutine 间可见性的方法,并进一步指出常见的错误同步手法。