请教 Golang 并发读写的问题

2022 年 11 月 1 日
 yaott2020
现在有个变量 a (type A struct{} 且 var a *A) ,想要动态修改 a 的字段 b (var b string) ,在同时多个 goroutine 读的情况下写入会不会不安全?把 b 的类型换成 func() 呢?
2643 次点击
所在节点    Go 编程语言
9 条回复
zmcity
2022 年 11 月 1 日
看看你的场景是不是要求严格时序一致的了,如果是的话加读写锁。
yaott2020
2022 年 11 月 1 日
放弃了,按照我的需求好像做不到。。。
yjhatfdu2
2022 年 11 月 1 日
可以使用 atomic
lanlanye
2022 年 11 月 1 日
多个读一个写的话,写入不会有冲突
rrfeng
2022 年 11 月 1 日
多个写会冲突,读哪有冲突一说。。。

顶多是读到你预期之外的数据(你以为写了但还没写完)
yaott2020
2022 年 11 月 1 日
@rrfeng 如果没写完 func 又有 goroutine 执行是不是有可能 panic 退出
linghutf
2022 年 11 月 2 日
两种方式:
1. 写时加写锁,读时加读锁
2. 把 a 放在 channel 中在 goroutine 间共享,谁拿到就可以操作
yaott2020
2022 年 11 月 2 日
@linghutf 就是不想加锁以及 channel ,看看有没有什么原子操作可以做到,好像找不到
lysS
2022 年 11 月 2 日
@lanlanye 这种是不安全的

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

https://v2ex.ih06.com/t/891753

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

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

© 2021 V2EX