網站首頁 編程語言 正文
sync.WaitGroup結構體對象
在Go語言中,sync.WaitGroup結構體對象用于等待一組線程的結束;WaitGroup是go并發中最常用的工具,我們可以通過WaitGroup來表達這一組協程的任務是否完成,以決定是否繼續往下走,或者取任務結果;
WaitGroup的結構體
結構如下所示:
type WaitGroup struct { noCopy noCopy state1 [3]uint32 }
在sync.WaitGroup結構體對象中有三個方法,Add()、Done()、Wait()
Add()方法
主要為WaitGroup的等待數+1或者+n;
Add()方法的定義如下:
func(*WaitGroup) Add()
- Add()方法內部計數器加上delta,delta可以是負數;
- 如果內部計數器變為0,則Wait()方法會將處于阻塞等待的所有goroutine釋放;
- 如果計數器小于0,則調用panic()函數;
- Add()方法加上正數的調用應在Wait()方法之前,否則Wait()方法可能只會等待很少的goroutine;
- Add()方法在創建新的goroutine或者其它等待的事件之前調用;
Done()方法
Done函數調用的也是Add函數,主要用于-1操作;
Done()方法的定義如下:
func(wg *WaitGroup) Done()
- Done()方法會減少WaitGroup計數器的值,一般在goroutine的最后執行;
Wait()方法
阻塞當前協程,直到等待數歸為0才繼續向下執行;
Wait()方法的定義如下:
func (wg *WaitGroup) Wait()
Wait()方法會阻塞,知道WaitGroup計數器減為0.
Add()、Done()、Wait()三者對比
- 在三個方法中,使用Add()方法添加計數,使用Done()方法減掉一個計數,如果計數不為0,則會阻塞Wait()方法的運行;
- 一個goroutine調用Add()方法來設定等待的goroutine的數量;
- 每個被等待的goroutine在結束時調用Done()方法;
- 在主goroutine里可以調用Wait()方法阻塞至所有goroutine結束;
sync.WaitGroup使用示例
使用sync.WaitGroup等待goroutine結束的示例如下圖所示:
原文鏈接:https://juejin.cn/post/7135606607391981582
相關推薦
- 2022-05-04 R語言邏輯型運算的實現_R語言
- 2024-01-16 linux查看外網ip的5種方法
- 2024-07-15 SpringBoot使用EasyExcel導出Excel(含設置下拉框、表頭凍結)
- 2024-04-04 jQuery實現ajax語法,post請求發送數組對象(jquery)
- 2022-04-23 Element UI中table表格組件的居中問題
- 2022-12-22 python3中超級好用的日志模塊-loguru模塊使用詳解_python
- 2022-10-06 C++中的struct和class的區別詳解_C 語言
- 2022-04-25 利用Redis實現訪問次數限流的方法詳解_Redis
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支