日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

协程的三种同步方式Channel、Mutex、WaitGroup

發布時間:2025/3/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 协程的三种同步方式Channel、Mutex、WaitGroup 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、無緩沖的channel:無緩沖的channel只能發送完之后協程立馬阻塞,只有等有協程接受了之后才能繼續發送,等待協程接受了,之后立馬阻塞,等待channel中有數據才會啟動 package mainimport ("fmt""time" )/* 無緩沖的channel只能發送完之后協程立馬阻塞,只有等有協程接受了之后才能繼續發送, 等待協程接受了,之后立馬阻塞,等待channel中有數據才會啟動 */ func main() {c := make(chan int) //聲明一個int類型的無緩沖通道go func() {fmt.Println("準備發送1數據")c <- 1fmt.Println("發送1數據完畢")fmt.Println("協程開始睡眠1秒")time.Sleep(time.Second)fmt.Println("協程結束睡眠")c <- 2fmt.Println("發送2數據完畢")}()fmt.Println("主線程休眠1秒")time.Sleep(time.Second)fmt.Println("主線程結束休眠")i := <-cfmt.Printf("接受 %d\n", i)i = <-cfmt.Printf("接受 %d\n", i)time.Sleep(time.Second) }

2、有緩沖的channel:當緩沖區滿了發送線程阻塞,緩沖區空了接受線程阻塞

package mainimport ( "fmt" "time" ) /* 當緩沖區滿了發送線程阻塞,緩沖區空了接受線程阻塞 */func main() {c := make(chan int, 2) //聲明一個int類型的有緩沖通道go func() {for i := 0; i < 4; i++ {c <- ifmt.Printf("send %d\n", i)}time.Sleep(5 * time.Second)for i := 4; i < 6; i++ {c <- ifmt.Printf("send %d\n", i)}}()for i := 0; i < 6; i++ {time.Sleep(time.Second)fmt.Printf("receive %d\n", <-c)} }

3、sync.Mutex

package mainimport ("fmt""sync""time" )var share_cnt uint64 = 0var lck sync.Mutexfunc incrShareCnt() {for i := 0; i < 1000000; i++ {lck.Lock()share_cnt++ //共有資源lck.Unlock()}fmt.Println(share_cnt) } func main() {for i := 0; i < 2; i++ {go incrShareCnt()}time.Sleep(1 * time.Second) //1秒 }

4、sync.Waitgroup:使用等待組進行多個任務的同步,等待組可以保證在并發環境中完成指定數量的任務

package mainimport ( "fmt" "sync" ) //使用等待組進行多個任務的同步,等待組可以保證在并發環境中完成指定數量的任務 func main() {fmt.Println("Hello World")var waitgroup sync.WaitGroupwaitgroup.Add(1)go myFunc(&waitgroup)waitgroup.Wait()fmt.Println("Finished Execution") } func myFunc(waitgroup *sync.WaitGroup) {fmt.Println("Inside my goroutine")waitgroup.Done() }

總結

以上是生活随笔為你收集整理的协程的三种同步方式Channel、Mutex、WaitGroup的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。