为了账号安全,请及时绑定邮箱和手机立即绑定

等待组数据同步保证

等待组数据同步保证

Go
浮云间 2022-08-15 15:36:16
去内存模型,声明如下:修改由多个 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”。WaitGroupsyncWait()a

没什么可说的。


查看完整回答
反对 回复 2022-08-15
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号