两个协程并行地编写切片的相同项.是否会出现恐慌性错误



两个协程并行写入切片的同一项。是否会出现恐慌性错误?

我没有找到关于这个的文件。

并发读写只会导致数据混乱,而不会发生死机?

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。

此外,这里有一个关于数据竞赛检测器的好文档

最新更新