Я только начинаю изучать golang, когда читал Go Memory Model, у меня возник вопрос, чтобы понять, что это говорит о "Другая неправильная идиома занята ожиданием значения",
var a string
var done bool
func setup() {
a = "hello, world"
done = true
}
func main() {
go setup()
for !done {
}
print(a)
}
В нем говорится:
«Хуже того, нет никакой гарантии, что main когда-либо заметит запись в done, поскольку между двумя потоками нет событий синхронизации. Завершение цикла в main не гарантируется».
Я знаю, что порядок записи в «a» и «done» не является детерминированным в setup(). Мой вопрос: почему main не гарантирует, что запись будет выполнена?
Спасибо
setup()
продолжить. Вот почему каналы являются общим решением для общения между горутинами. Общая аксиома в Go: не общайтесь, делясь памятью, делитесь памятью, общаясь. 08.05.2017