golang struct并发读写而没有锁定也可以运行吗?

golang struct并发读写而没有锁定也可以运行吗?,第1张

golang struct并发读写而没有锁定也可以运行吗?

从多个goroutine中至少其中一个是写 *** 作的对任何变量的未同步并发访问是 未定义的行为
。不要尝试以未定义的行为查找逻辑,只需使用适当的同步即可。未定义意味着它可能会“正确”运行,也可能“不正确”运行(给出错误的结果),或者崩溃或发生其他任何情况。那就是未定义的意思。

concurrentStructWithMuLock()
居然没有数据的比赛,因为你使用的是互斥正确同步访问结构。

concurrentMap()
这是另一个问题。Go1.6向运行时添加了轻量级的并发滥用地图检测功能:

运行时增加了轻巧,尽力而为的检测并发滥用地图的功能。与往常一样,如果一个goroutine正在写入地图,则其他goroutine不应同时读取或写入地图。
如果运行时检测到这种情况,它将打印诊断并使程序崩溃。 找出更多有关该问题的最佳方法是在“
种族检测器”下运行该程序,这将更可靠地识别种族并提供更多详细信息。

因此,这是运行时的有意崩溃,因为它检测到对映射的非同步访问。这是Go运行时的“功能”,它会使您的应用程序崩溃,因为您的应用程序中不应保留任何数据竞争(以防止发生未定义的行为)。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5086664.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存