Я смотрю на безопасность горутин, и у меня есть приведенный ниже код для иллюстрации. Я обнаруживаю состояние гонки, когда запускаю приведенный ниже код, который понятен.
var buffer1, buffer2 bytes.Buffer
// two writers to same buffer
writer1 = bufio.NewWriter(&buffer1)
writer2 = bufio.NewWriter(&buffer1)
c := func(dst io.Writer, src io.Reader) {
io.Copy(dst, src)
}
go c(writer1, os.Stdin)
go c(writer2, os.Stderr)
У меня один раз состояние гонки возникает во время выполнения, когда я заменяю bufio.NewWriter
на io.MultiWriter
как показано ниже. Но использование детектора состояния гонки не показывает мне каких-либо гонок данных, происходящих в приведенном ниже фрагменте кода. . безопасно ли это и почему встречается редко?