小编yao*_*gen的帖子

如何在golang中创建真实的比赛条件

问题描述

最近,我学会了-race检查go中比赛条件是否存在的选项。完整的命令是go run -race xxx.go它确实对我有很大帮助。但是和下面的代码一样,我认为检查结果是错误的,并尝试了很多方法(我在下面尝试引起恐慌)导致真正的恐慌但失败了。所以,我想知道是否该代码是正确的,比赛检查是错了吗?或者你可以修改我的代码,这样我可以查阅一个真正的恐慌。非常感谢。

代码

package main
import "fmt"

type myType struct {
    A int
}

func main(){
    c:=make(chan bool)
    x := new(myType)
    go func(){
        x = new(myType) // write to x
        c <- true
    }()
    _ = *x // read from x
    <-c
    fmt.Println("end")
}
Run Code Online (Sandbox Code Playgroud)

比赛检查结果

go run -race test.go

==================
WARNING: DATA RACE
Write at 0x00c00009c010 by goroutine 6:
  main.main.func1()
      /Users/yaodongen/test.go:12 +0x56

Previous read at …
Run Code Online (Sandbox Code Playgroud)

concurrency pointers go race-condition goroutine

0
推荐指数
1
解决办法
41
查看次数

标签 统计

concurrency ×1

go ×1

goroutine ×1

pointers ×1

race-condition ×1