Рассмотрим эту программу:Почему эта программа заканчивается в моей системе, но не на детской площадке?
package main
import "fmt"
import "time"
import "runtime"
func main() {
x := 0
go func() {
time.Sleep(500 * time.Millisecond)
x = 1
}()
for x == 0 {
runtime.Gosched()
}
fmt.Println("it works!")
}
Почему это прекратить на месте, но не на Playground? Оканчивает ли моя программа зависимость от неопределенного поведения?
Это может быть верно в C, но в Go есть вещи, которые могут быть изменены значение x; одно из них - назначение в процедуре Go.Неверный компилятор, который оптимизирует проверку. – fuz
Видимо, занятое ожидание действительно [неопределенное поведение] (http://golang.org/ref/mem) в Go. Тем не менее, мой предыдущий комментарий. – fuz
@FUZxxl: это не случай оптимизации проверки. См. Мой ответ, почему код гарантированно не работает на детской площадке. –