详解Go内存模型
Go 内存模型规定了一些条件,在这些条件下,在一个 goroutine 中读取变量返回的值能够确保是另一个 goroutine 中对该变量写入的值。当多个 goroutine 访问一个共享的变量 v 时,它们必须使用同步的事件来建立 happens-before 条件来确保读操作观察到预期的写操作。程序初始化操作在一个单独的 goroutine 中运行,但是这个 goroutine 可能创建其他并发执行的 goroutines。启动一个新的 goroutine 的 go 语句的执行在这个 goroutine 开始执行前发生。管道通信是在 goroutine 间同步的主要方法。一个管道的发送操作匹配一个管道的接收操作。结果将会打印两次"hello, world"。更糟糕的是,不能够保证对 done 的写入会被 main 观察到,因为两个线程间没有同步事件。在 main 中的循环不能确保会完成。
用户评论