我遇到了数据竞争,比如
WARNING: DATA RACE
11652 Read by goroutine 14:
11653 runtime.chansend()
11654 /usr/local/go/src/pkg/runtime/chan.c:155 +0x0
...
11657
11658 Previous write by goroutine 13:
11659 runtime.closechan()
11660 /usr/local/go/src/pkg/runtime/chan.c:1232 +0x0
...
频道有锁定,为什么会有数据竞争?
答案 0 :(得分:1)
关闭后正在写入一个频道。即使只有一个goroutine,你也会感到恐慌。
package main
func main() {
c := make(chan struct{})
close(c)
c <- struct{}{} // should panic!
}
你所得到的是各种各样的,但是有一个goroutine关闭,另一个goroutine试图写后。竞赛检测器正在将此报告为数据竞赛。
为什么您的程序中的频道已关闭?