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

繁星淼淼
TA贡献1775条经验 获得超11个赞
您的问题的答案都是:是的。 是一个同步基元,这就是为什么它在包中的原因。对 的调用保证您将看到 正确的值。代码保证打印“hello”。WaitGroup
sync
Wait()
a
没什么可说的。
- 1 回答
- 0 关注
- 103 浏览
添加回答
举报
0/150
提交
取消