最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang中的同步工具sync.WaitGroup詳解

 更新時間:2023年05月16日 09:42:53   作者:路多辛  
這篇文章主要詳細(xì)為大家介紹了Golang中的同步工具sync.WaitGroup,文中有詳細(xì)的代碼示例,具有很好的參考價值,希望對大家有所幫助,一起跟隨小編過來看看吧

sync.WaitGroup

sync.WaitGroup作用是等待一組goroutine執(zhí)行完成,當(dāng)使用多個goroutine處理任務(wù)的時候,如果要等待所有的goroutine都執(zhí)行完成后再執(zhí)行下一步操作,就可以使用sync.WaitGroup來實現(xiàn)。

sync.WaitGroup有三個方法:

  • Add(delta int):增加或減少等待goroutine的數(shù)量,delta可以為負(fù)數(shù);
  • Done():標(biāo)記goroutine已執(zhí)行完成,等價于Add(-1);
  • Wait():等待所有的goroutine執(zhí)行完成。

使用方法和示例

假如有n個任務(wù)需要處理,可以先創(chuàng)建一個WaitGroup,用于等待所有的任務(wù)完成:

var wg sync.WaitGroup

在處理每一個任務(wù)之前,調(diào)用一次Add方法:

wg.Add(1)

在每一個任務(wù)處理完成之后,調(diào)用一次Done方法:

wg.Done()

最后,在等待所有的任務(wù)完成之前,需要調(diào)用一次Wait方法:

wg.Wait()

具體示例代碼如下:

package main
 
import (
	"log"
	"sync"
	"time"
)
 
func main() {
	// 創(chuàng)建一個等待組
	var wg sync.WaitGroup
 
	for i := 1; i <= 5; i++ {
		// 每一個任務(wù)開始前, 增加1
		wg.Add(1)
 
		go func(index int) {
			// 處理業(yè)務(wù)邏輯
			//...
			time.Sleep(1 * time.Second)
			log.Printf("第 %d 個goroutine執(zhí)行完了", index)
			wg.Done()
		}(i)
	}
	// 等待所有的任務(wù)完成
	wg.Wait()
	log.Println("所有g(shù)oroutine都執(zhí)行完了")
}

使用過程中需要注意的點

Done和Add方法的順序非常重要,Done方法必須在goroutine最后執(zhí)行,否則可能會導(dǎo)致計數(shù)器無法正確的達(dá)到0;
如果使用Add或Done方法將wg維護的計數(shù)更改成了負(fù)數(shù)會導(dǎo)致panic;
Wait方法會一直阻塞,直到所有的goroutine都執(zhí)行完成為止(wg維護的計數(shù)達(dá)到0),因此在使用時需要小心;
sync.WaitGroup是開箱即用的,并且是并發(fā)安全的。

到此這篇關(guān)于Golang中的同步工具sync.WaitGroup詳解的文章就介紹到這了,更多相關(guān)Golang同步工具sync.WaitGroup內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中的錯誤處理的示例詳解

    Golang中的錯誤處理的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Golang中的錯誤處理的相關(guān)資料,文章中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Golang有一定幫助,需要的可以參考一下
    2022-12-12
  • Golang 并發(fā)控制模型的實現(xiàn)

    Golang 并發(fā)控制模型的實現(xiàn)

    Go控制并發(fā)有三種經(jīng)典的方式,使用?channel?通知實現(xiàn)并發(fā)控制、使用 sync 包中的?WaitGroup?實現(xiàn)并發(fā)控制、使用?Context?上下文實現(xiàn)并發(fā)控制,下面就來介紹一下
    2024-08-08
  • Golang 編譯成DLL文件的操作

    Golang 編譯成DLL文件的操作

    這篇文章主要介紹了Golang 編譯成DLL文件的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • gorm樂觀鎖使用小結(jié)

    gorm樂觀鎖使用小結(jié)

    本文主要介紹了gorm樂觀鎖使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-08-08
  • Golang Socket Server自定義協(xié)議的簡單實現(xiàn)方案

    Golang Socket Server自定義協(xié)議的簡單實現(xiàn)方案

    這篇文章主要介紹了Golang Socket Server自定義協(xié)議的簡單實現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang并發(fā)操作中常見的讀寫鎖詳析

    Golang并發(fā)操作中常見的讀寫鎖詳析

    Golang中的鎖機制主要包含互斥鎖和讀寫鎖互斥鎖互斥鎖是傳統(tǒng)并發(fā)程序?qū)蚕碣Y源進行控制訪問的主要手段,這篇文章主要給大家介紹了關(guān)于Golang并發(fā)操作中常見的讀寫鎖的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Golang的函數(shù)類型詳細(xì)解析

    Golang的函數(shù)類型詳細(xì)解析

    函數(shù)類型(function type)是Go中一種重要的機制,允許開發(fā)者將函數(shù)視為類型,從而實現(xiàn)函數(shù)的傳遞、賦值和返回,這使得代碼更具靈活性和可復(fù)用性,本文將從函數(shù)類型的定義、特性、用途和應(yīng)用場景等方面進行詳細(xì)闡述,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • Go Java算法之同構(gòu)字符串示例詳解

    Go Java算法之同構(gòu)字符串示例詳解

    這篇文章主要為大家介紹了Go Java算法之同構(gòu)字符串示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 談?wù)凣o語言的反射三定律

    談?wù)凣o語言的反射三定律

    本文中,我們將解釋Go語言中反射的運作機制。每個編程語言的反射模型不大相同,很多語言索性就不支持反射(C、C++)。由于本文是介紹Go語言的,所以當(dāng)我們談到“反射”時,默認(rèn)為是Go語言中的反射。
    2016-08-08
  • go語言template用法實例

    go語言template用法實例

    這篇文章主要介紹了go語言template用法,實例分析了template的使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02

最新評論

保德县| 漳平市| 界首市| 湛江市| 天水市| 佳木斯市| 新余市| 巴彦淖尔市| 平阴县| 象州县| 高邮市| 绥滨县| 禄丰县| 长寿区| 淮南市| 新郑市| 长岭县| 南平市| 安西县| 长治县| 那坡县| 曲周县| 清涧县| 岱山县| 丹江口市| 建平县| 洛川县| 长岭县| 抚顺市| 综艺| 高碑店市| 鞍山市| 阳春市| 通城县| 炎陵县| 灌云县| 长兴县| 雷山县| 巴马| 灯塔市| 同仁县|