1. 首页
  2. 主题
  3. Go问与答

初学乍练,求教怎么让协程交替执行

yinshidaoshi · · 2118 次点击
协程交替执行,使其能顺序输出1-20的自然数 ```go package main import ( "fmt" "time" ) func main() { for i:=1;i<=10;i++ { go func(i int) { fmt.Println(2*i-1) }(i) } for i:=1;i<=10;i++ { go func(i int) { fmt.Println(2*i) }(i) } time.Sleep(3*time.Second) }```
90design
狗狼都是神
3楼的写法也很好哦
#6
更多评论
试试这样: ```go func main() { runtime.GOMAXPROCS(1) c1 := make(chan struct{}, 1) c2 := make(chan struct{}, 1) for i := 1; i &lt;= 10; i++ { go func(i int) { &lt;-c1 fmt.Println(2*i - 1) c2 &lt;- struct{}{} }(i) } for i := 1; i &lt;= 10; i++ { go func(i int) { &lt;-c2 fmt.Println(2 * i) c1 &lt;- struct{}{} }(i) } c1 &lt;- struct{}{} c2 &lt;- struct{}{} time.Sleep(3 * time.Second) } ```
#1
试试我的歪招,哈哈 ```go package main import ( &#34;fmt&#34; &#34;time&#34; ) func main() { c1 := make(chan int) c2 := make(chan int) go func() { for i := 1; i &lt;= 10; i++ { &lt;-c1 go func(i int) { fmt.Println(2*i - 1) c2&lt;-1 }(i) } }() go func() { for i := 1; i &lt;= 10; i++ { &lt;-c2 go func(i int) { fmt.Println(2 * i) c1 &lt;- 1 }(i) } }() c1&lt;-1 time.Sleep(3 * time.Second) } ```
#2

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中