Golang中的并发

来源:互联网 发布:企业邮箱 知乎 编辑:程序博客网 时间:2024/05/20 08:43
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 mainimport (    "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
原创粉丝点击