[英]Is there is a data race when you send a message to channel and close it?
我遇到了像这样的数据竞赛
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
...
通道有锁,为什么会有数据争用?
关闭通道后,正在写入通道。 即使只有一个goroutine,您也会感到恐慌。
package main
func main() {
c := make(chan struct{})
close(c)
c <- struct{}{} // should panic!
}
您所拥有的是各种各样的内容,但是其中一个goroutine关闭,而另一个goroutine正在尝试稍后编写。 种族探测器将其正确报告为数据竞争。
为什么在您的程序中关闭通道?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.