Golang中的并发

sync.WaitGroup provides a goroutine synchronization mechanism in Golang, and is used for waiting for a collection of goroutines to finish.
 1.Golang中的go func()是异步的,主函数main中的协程并不会等待go func()的完成,一旦main中协程执行结束就立马退出,然而go func()的协程可能还在执行。如果go func()中执行的函数的时间远远小于main中的协程执行时间,这个时候main协程退出了,go func()协程已经完成任务了。
2.如果想让main中的协程等待其他的协程完成任务后再退出,只能使用同步方法,例如sync.WaitGroup
3.如下是代码示例
package main
import (
    "time"
    "fmt"
    "sync"
)
type Job struct {
    name  string
    i     int
    max   int
}
func Exec(job *Job,wg *sync.WaitGroup) {
    defer wg.Done()
    for job.i< job.max {
        fmt.Printf("%s%d\n",job.name,job.i)
        time.Sleep(1 * time.Millisecond)
        job.i++
    }
}
func main() {
    var wg sync.WaitGroup
    wg.Add(2)
    job1 := Job{}
    job1.max = 6
    job1.name = "job1_"
    job2 := Job{}
    job2.max = 3
    job2.name = "job2_"
    go Exec(&job1,&wg)
    Exec(&job2,&wg)
    wg.Wait()
}

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值