栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么此代码未定义行为?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么此代码未定义行为?

Go Memory
Model不保证该

main
程序将始终遵守在goroutine中写入x的值。go常规销毁
部分中提供了一个类似的错误程序作为示例。
在本节中,Go内存模型还专门调出了没有同步的繁忙等待,这是不正确的习惯用法。

(在您的情况下,无法保证程序

done
会遵守在goroutine中写入的值
main

在这里,您需要在goroutine中进行某种同步,以确保在in

done=true
中的
for
循环迭代之前发生
main

while
”(Go中不存在)应替换为例如您阻塞的通道(等待通信)

for {    <-c // 2}

基于在goroutine中在中

c := make(chan bool)
创建
main
并关闭(
close(c)
)的通道()。


的同步包提供其他手段离开主之前等待一个gorountine到端。

例如查看Golang示例等待所有后台goroutine完成:

var w sync.WaitGroupw.Add(1)go func() {    // do something    w.Done()}w.Wait()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448166.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号