内存顺序保证

Go中的内存顺序保证 - Go语言101(通俗版Go白皮书) https://gfw.go101.org/article/memory-model.html#mutex

有时,为了程序的逻辑正确性,我们需要确保一个协程中的一些语句一定要在另一个协程的某些语句之后(或者之前)执行(从这两个协程的角度观察都是如此)。 指令执行顺序调整可能会给此需求带来一些麻烦。 我们应如何防止某些可能发生的指令执行顺序调整呢?

不同的CPU架构提供了不同的栅栏(fence)指令来防止各种指令执行顺序调整。 一些编程语言提供对应的函数来在代码中的合适位置插入各种栅栏指令。 但是,理解和正确地使用这些栅栏指令极大地提高了并发编程的门槛。

Go语言的设计哲学是用尽量少的易于理解的特性来支持尽量多的使用场景,同时还要尽量保证代码的高执行效率。 所以Go内置和标准库并没有提供直接插入各种栅栏指令的途径。 事实上,这些栅栏指令被使用在Go中提供的各种高级数据同步技术的实现中。 所以,我们应该使用Go中提供的高级数据同步技术来保证我们所期待的代码执行顺序。

原文地址:https://www.cnblogs.com/rsapaper/p/15797275.html