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

我可以同时写不同的slice元素吗

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

我可以同时写不同的slice元素吗

规则很简单:如果多个goroutines
同时访问一个变量,并且至少其中之一是写操作,则需要同步。

您的示例不违反此规则。您无需写入切片 (slice标头),而仅读取它(隐式地在索引时)。

您不阅读slice 元素 ,只修改了slice元素。并且每个goroutine仅修改单个, 不同的指定的
slice元素。而且,由于每个slice元素都有其自己的地址(自己的内存空间),因此它们就像不同的变量。规格:变量中对此进行了介绍:

__array
,slice和struct类型的
结构化 变量具有可以单独处理的元素和字段。
每个这样的元素就像一个变量。

必须记住的是,如果不

results
进行同步,则无法从切片中读取结果。您在示例中使用的等待组是足够的同步。一旦
wg.Wait()
返回,就可以读取切片,因为只有在所有工作程序goroutine都调用之后才能发生该操作
wg.Done()
,并且所有工作程序goroutine
都不能在调用之后修改元素
wg.Done()

例如,这是检查/处理结果的有效( 安全 )方法:

wg.Wait()// Safe to read results after the above synchronization point:fmt.Println(results)

但是,如果您尝试访问

results
before 的元素
wg.Wait()
,那就是一场数据竞赛:

// This is data race! Goroutines might still run and modify elements of results!fmt.Println(results)wg.Wait()


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

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

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