append一个element到一个正在读的slice是否安全

请看下面的代码,如果多个goroutine读写slice是不是安全? ``` func (o *Obj) Reader() { data := o.data; for i, value := range data { log.Printf("got data[%v] = %v", i, value) } } ``` ``` func (o *Obj) Writer() { o.data = append(o.data, 1234) } ```
已邀请:

su21

赞同来自: mnhkahn bopjiang

除了说明安全的,其他都不安全。显然是 race condition 。 go run -race 看一下就有警告了。
如果多个goroutine分别对变量的有读写操作,就不是并发安全的。当然 ,channel除外

SuperFashi - To code or be coded, that's a question.

不安全,还是得搞个 `Mutex`

yong27 - 80IT

go run -race 就算是一个int变量 并发读写都会告警

themoonstone - 90后IT男

用mutex

云开 - DRY

除了channle是并发安全的,其他都不是,使用sync包的读写锁

要回复问题请先登录注册