1 Star 0 Fork 0

J-star/BaiduPCS-Go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
wait_group.go 978 Bytes
一键复制 编辑 原始数据 按行查看 历史
konica 提交于 2018-04-29 00:05 . v3.5
// Package waitgroup sync.WaitGroup extension
package waitgroup
import "sync"
// WaitGroup 在 sync.WaitGroup 的基础上, 新增线程控制功能
type WaitGroup struct {
wg sync.WaitGroup
p chan struct{}
sync.RWMutex
}
// NewWaitGroup returns a pointer to a new `WaitGroup` object.
// parallel 为最大并发数, 0 代表无限制
func NewWaitGroup(parallel int) (w *WaitGroup) {
w = &WaitGroup{
wg: sync.WaitGroup{},
}
if parallel <= 0 {
return
}
w.p = make(chan struct{}, parallel)
return
}
// AddDelta sync.WaitGroup.Add(1)
func (w *WaitGroup) AddDelta() {
if w.p != nil {
w.p <- struct{}{}
}
w.wg.Add(1)
}
// Done sync.WaitGroup.Done()
func (w *WaitGroup) Done() {
w.wg.Done()
if w.p != nil {
<-w.p
}
}
// Wait 参照 sync.WaitGroup 的 Wait 方法
func (w *WaitGroup) Wait() {
w.wg.Wait()
if w.p != nil {
close(w.p)
}
}
// Parallel 返回当前正在进行的任务数量
func (w *WaitGroup) Parallel() int {
return len(w.p)
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/j-star/BaiduPCS-Go.git
git@gitee.com:j-star/BaiduPCS-Go.git
j-star
BaiduPCS-Go
BaiduPCS-Go
v3.5.6

搜索帮助

0d507c66 1850385 C8b1a773 1850385