У вас есть программы, читающие переменную m
, и программы, записывающие переменную m
без явной синхронизации.Это гонка данных и, следовательно, неопределенное поведение.
Запустите его с включенным детектором гонки:
$ go run -race play.go
==================
WARNING: DATA RACE
Write at 0x00c00008c000 by goroutine 15:
main.main.func2()
/home/icza/gows/src/play/play.go:17 +0x46
Previous read at 0x00c00008c000 by goroutine 5:
main.main.func1()
/home/icza/gows/src/play/play.go:8 +0x45
Goroutine 15 (running) created at:
main.main()
/home/icza/gows/src/play/play.go:15 +0xdd
Goroutine 5 (finished) created at:
main.main()
/home/icza/gows/src/play/play.go:7 +0xa4
==================
Found 1 data race(s)
exit status 66
См. Связанные вопросы:
Безопасно личитать указатель функции одновременно без блокировки?
Также пример, который нарушает безопасность памяти Go с преднамеренной гонкой данных: Гонки данных Golang нарушают безопасность памяти