在Ubuntu下会把切片里的元素全部输出,但是win7下不行,我是在学一本go书籍中看到的这个实例,按着书中所述,runtime.Gosched()应该放在for循环外,那样在win7和Ubuntu切片都不能全部输出.我理解的是放在切片内,但是只能在Ubuntu中可以全部输出???这个是为什么???runtime.Gosched()到底应该放在for外还是for里???高手帮着解答下,万分感激!!!
```go
package main
import (
"fmt"
"runtime"
)
func main() {
names := []string{"li", "wang", "zhang", "song", "liu", "ye"}
for _, name := range names {
go func(who string) {
fmt.Println(who, "是谁?")
}(name)
runtime.Gosched()
}
}
```
更多评论
放在里面能运行的可能性更大。注意,我这里说的是可能性。
`Gosched` 文档说明如下:
> Gosched yields the processor, allowing other goroutines to run. It does not suspend the current goroutine, so execution resumes automatically. go:nosplit
可见,调用 `Gosched` 并不能保证当前 goroutine 一定不会继续运行。也就是说,你这里即使调用它,main goroutine 也有可能继续执行,然后程序终止,其他 goroutine 还没有运行。所以,按概率,放在 for 里面全部执行的可能性更大,但要保证全部都执行,请在 main goroutine 中做其他处理,比如 sleep 或 wait
#1