为了账号安全,请及时绑定邮箱和手机立即绑定

串行并发打印

串行并发打印

Go
慕田峪7331174 2022-10-04 16:36:05
我试图同时打印,但无法弄清楚为什么它的串行,已经把代码放在下面package mainimport (        "fmt"        "sync")func main() {        fmt.Println("Hello, playground")        var wg sync.WaitGroup        wg.Add(2)    go func(){        for i := 0; i < 4; i++ {                if i%2 == 0 {                        fmt.Println("hi", i)                }        }         wg.Done()       }()        go func() {                for i := 0; i < 4; i++ {                        if i%2 != 0 {                                fmt.Println("g", i)                        }                }                wg.Done()        }()        wg.Wait()}期望值是 hi0 g1 hi2 g3但我得到从 g 1 从 g 3 hi 0 hi 2
查看完整描述

1 回答

?
qq_笑_17

TA贡献1818条经验 获得超7个赞

如此小的函数不太可能演示并发性,因为第一个 goroutine 甚至可能在第二个函数开始之前或上下文切换发生之前完成。如果在循环中添加一个小的暂停,您将观察到交错:


package main


import (

    "fmt"

    "sync"

    "time"

)


func main() {

    var wg sync.WaitGroup

    wg.Add(2)

    go func() {

        for i := 0; i < 4; i++ {

            if i%2 == 0 {

                fmt.Println("hi", i)

            }

            time.Sleep(10 * time.Millisecond)

        }

        wg.Done()

    }()

    go func() {

        for i := 0; i < 4; i++ {

            if i%2 != 0 {

                fmt.Println("from g", i)

            }

            time.Sleep(10 * time.Millisecond)


        }

        wg.Done()

    }()

    wg.Wait()

}


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号