golang Value 赋值 ,会出现并发问题吗?

2018-08-09 10:40:01 +08:00
 helloworld12

譬如:

type S struct {
	X string
}

s := S{}

go func() {
	time.Sleep(xxx)
    s.X = s.X + "nnn" // B
}()
s = S{X:"nnn"} // A

假设是多核的,A,B 阶段,同时执行,会有并发问题吗?

1168 次点击
所在节点    问与答
4 条回复
per
2018-08-09 10:51:37 +08:00
会的吧,同一字段的读写。加个锁
hahasong
2018-08-09 11:01:44 +08:00
会的,给 S 加个 mu.lock
ray1888
2018-08-09 13:38:17 +08:00
可以试一下 atomic 的 cas,不一定要用锁解决
KickAssTonight
2018-08-09 17:42:27 +08:00
并发是存在的,可以用 sync.Mutex 对资源上锁。
https://tour.golang.org/concurrency/9

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/478168

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX