在 $GOROOT/src/runtime
目录下新建一个 whatever.go
文件,文件内容如下:
package runtime
type G = g
func GetG() *G {
return getg()
}
var l mutex
func GoPark() {
lock(&l)
goparkunlock(&l, 0, 0, 0)
}
func GoReady(g *G) {
goready(g, 3)
}
然后我们就可以在自己的代码中疯狂地玩耍比如这样:
package main
import (
"runtime"
"sync"
"time"
)
func main() {
ch := make(chan bool)
var g *runtime.G
go func() {
g = runtime.GetG()
for {
println(time.Now().Unix())
time.Sleep(time.Second)
select {
case <-ch:
runtime.GoPark()
default:
}
}
}()
time.Sleep(3 * time.Second)
ch <- true
time.Sleep(3 * time.Second)
runtime.GoReady(g)
wg := &sync.WaitGroup{}
wg.Add(1)
wg.Wait()
}
不解释,自己看。
有疑问加站长微信联系(非本文作者)