1 Star 0 Fork 1

ttpc2008/BaiduPCS-Go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
wait_group.go 1002 Bytes
一键复制 编辑 原始数据 按行查看 历史
konica 提交于 2018-02-20 13:37 . 微调
package pcsutil
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 的基础上, 新增线程控制功能
func (w *WaitGroup) AddDelta() {
if w.p != nil {
w.p <- struct{}{}
}
w.wg.Add(1)
}
// Done 在 sync.WaitGroup 的基础上, 新增线程控制功能
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/ttpc2008/BaiduPCS-Go.git
git@gitee.com:ttpc2008/BaiduPCS-Go.git
ttpc2008
BaiduPCS-Go
BaiduPCS-Go
v3.3.3

搜索帮助