go等待一組協程結束的實現方式

2022-03-20 07:40:45 字數 1223 閱讀 1032

**:

go提供了sync包和channel來解決協程同步和通訊。

方式1:

sync.waitgroup是等待一組協程結束,sync.waitgroup只有3個方法,add()新增乙個計數,done()減去乙個計數,wait()阻塞直到所有任務完成。

package main

import (

"fmt"

"sync"

"time"

)var wg sync.waitgroup //定義乙個同步等待的組

func task(i int)

func main()

wg.wait() //阻塞直到所有任務完成

fmt.println("over")

}執行結果:

task... 9

task... 4

task... 6

task... 0

task... 7

task... 5

task... 1

task... 2

task... 8

task... 3

over

方式2:

利用緩衝通道channel協程之間通訊,其阻塞等待功能實現等待一組協程結束,不能保證其goroutine按照順序執行

package main

import (

"fmt"

)var ch = make(chan int,10)

func task(i int)

func main()

for i:= 0;i<10;i++

fmt.println("over")

}執行結果:

task... 9

task... 0

task... 1

task... 2

task... 6

task... 7

task... 3

task... 4

task... 8

task... 5

over

方式3:

利用無緩衝的通道channel協程之間通訊,其阻塞等待功能實現等待一組協程結束,保證了其goroutine按照順序執行

package main

import (

"fmt"

"time"

)var ch = make(chan int)

func task(i int)

go等待一組協程結束的實現方式

go提供了sync包和channel來解決協程同步和通訊。方式1 sync.waitgroup是等待一組協程結束,sync.waitgroup只有3個方法,add 新增乙個計數,done 減去乙個計數,wait 阻塞直到所有任務完成。package main import fmt sync time...

聊一聊go的協程

最近在學習go語言,學習到了協程,來記錄下學習的心路歷程 先來看下例子 列印5個hello和5個world package main func say s string func main go 啟動協程的方式就是使用關鍵字 go,後面一般接乙個函式或者匿名函式 執行上述 發現什麼也沒有輸出 為什麼...

C C 協程的實現方式總結

1 利用 c 語言的 setjmp 和 longjmp,函式中使用 static local 的變數來儲存協程內部的資料。函式原型 int setjmp jmp buf envbuf void longjmp jmp buf envbuf,int val 先呼叫setjmp,用變數envbuf記錄當...