共享内存我不知道什么是最下边这个名言地解释:说明:不要通过共享内存进行通信;通过交流
不要通过共享内存通信;通过通信共享内存。 (R.派克)
在The Go Memory Model我可以读取该:
A中的信道上发送的之前发生相应的接收从该信道完成。 (Golang Spec)
还有一个专门的golang article解释报价。关键的贡献是一个working example也由安德鲁G.
那么。有时候,太多的交谈围绕....我从内存规格报价得出,也看在工作实例如下:
后goroutine1通过通道,那么所有的修改发送(任何)到goroutine2 (在内存中的任何位置)通过goroutine1完成后,必须通过同一通道接收后才能看到goroutine2。 (Golang引理由我:)
Therfore我得出下到名言地解释:
要同步两个够程之间的内存访问,你并不需要通过送内存渠道。足够好的是从渠道接收(甚至没有)。您将看到goroutine在发送时(发送到频道)写入(任何地方)的任何更改。 (当然,假设没有其它够程被写入相同的内存。)更新(2)2017年8月26日
我有实际上是两个问题:
1)我的结论正确?
2)我的解释有帮助吗?
更新(1) 我假定无缓冲通道。让我们首先限制自己,避免以太多未知数来彻底改变自己。
请,我们还集中在两个够程通信的单信道及相关的记忆效应,而不是最佳做法的一个简单的用例 - 这超出了这个问题的范围。
为了更好地理解我的问题的范围,假设goroutines可以访问任何类型的内存结构 - 不仅仅是原始内存结构 - 它可以是一个很大的内存结构,它可以是字符串,映射,数组等等。
TODO写测试 – honzajde