两个协程并行写入切片的同一项。是否会出现恐慌性错误?
我没有找到关于这个的文件。
并发读写只会导致数据混乱,而不会发生死机?
import (
"fmt"
"strconv"
"time"
)
func main() {
arr := []string{"a", "b", "c", "d"}
// write 1
go func() {
for {
arr[2] = strconv.FormatInt(time.Now().Unix(), 10)
}
}()
// read 1
go func() {
for {
fmt.Println(arr[2])
}
}()
// write 2
go func() {
for {
arr[2] = strconv.FormatInt(time.Now().Unix(), 10)
}
}()
time.Sleep(10 * time.Second)
return
}
这是一场数据竞赛。尝试使用-race
标志运行代码。例如CCD_ 2。
此外,这里有一个关于数据竞赛检测器的好文档