http://golang.org/doc/go_mem.html
Go的内存模型不是指该语言的变量函数在内存中堆和栈的实现,而是作为并发式语言,来定义如何保证在一个函数中读取一个变量时能观察到该变量的值的条件,而该变量可能在另一个函数中被改变。也就是解决并发的变量读写时序问题。
Introduction
Happens Before
Synchronization
Initialization
Goroutine creation
Channel communication
Locks
Once
Incorrect synchronization
Happens Before(发生之前):
定义了一个Happen Before Order,有些词翻译起来太拗口了
Synchronization(同步):
-Initialization(初始化)
定义程序的初始化
-Goroutine creation(Go函数例程的初始化)
Goroutine其实是对一个Go函数的一次调用,叫例程(routine)吧
-Channel communication(通道通讯)
定义channel里有send和receive两个操作,channel分为buffered和unbeffered
-Locks(锁)
sync包里有2个锁类型:sync.Mutex 和 sync.RWMutex .
-Once(一旦)
once包提供一种安全的规定多个go函数之间某种优先次序的机制。
Incorrect synchronization
举了一些错误同步的例子,不要以为自己想的次序和运行时发生的次序就会一致,因为这是并发编程。
最后提了一个终极解决方案:无论何时都用显式的同步。
985

被折叠的 条评论
为什么被折叠?



