登录
首页 >  Golang >  Go问答

两个协程并行写入切片的相同项。可能会发生恐慌错误吗?

来源:stackoverflow

时间:2024-04-12 14:30:36 239浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《两个协程并行写入切片的相同项。可能会发生恐慌错误吗?》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

两个协程并行写入切片的相同项。可能会发生紧急错误吗?

我没有找到关于此的文档。

并发读写只会导致数据错乱,不会发生panic error?

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 标志运行您的代码。例如go 运行-race main.go

另外,这里有一个关于 Data Race Detector 的很好的文档

以上就是《两个协程并行写入切片的相同项。可能会发生恐慌错误吗?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>