去内存模型,声明如下:
修改由多个 goroutine 同时访问的数据的程序必须序列化此类访问。若要序列化访问,请使用通道操作或其他同步基元(如同步和同步/原子包中的同步基元)保护数据。
可悲的是,文档没有具体说明它们与什么相关。synchronization primitive
我的问题,是否包含在那些?WaitGroupsynchronization primitives
根据上面的语句,在下面的代码中,可能永远不会被视为 true:done
var a string
var done bool
func setup() {
a = "hello, world"
done = true
}
func main() {
go setup()
for !done {
}
print(a)
}
WaitGroup 是否保证一旦被调用,在组的 goroutines 执行中写入共享内存的值将以最新的值显示?waitgroup.Wait()
换句话说,下面的代码是否保证打印“hello”?(操场)
package main
import (
"sync"
)
var a string = "start"
var wg sync.WaitGroup
func hello() {
wg.Add(1)
go func() {
a = "hello"
wg.Done()
}()
wg.Wait()
print(a)
}
func main() {
hello()
}
繁星淼淼
相关分类