// counter package main import ( "sync" ) type Counter struct { mu sync.Mutex user int log int rem int err int dup int wg []int } func NewCounter() *Counter { return &Counter{ user: 0, log: 0, err: 0, rem: 0, dup: 0, wg: make([]int, opts.Concurrent), } } func (c *Counter) AddUser() { c.mu.Lock() defer c.mu.Unlock() c.user++ } func (c *Counter) AddDuplicate() { c.mu.Lock() defer c.mu.Unlock() c.dup++ } func (c *Counter) AddLog(add int) { c.mu.Lock() defer c.mu.Unlock() c.log += add } func (c *Counter) AddRem(add int) { c.mu.Lock() defer c.mu.Unlock() c.rem += add } func (c *Counter) AddWG(id int) { c.mu.Lock() defer c.mu.Unlock() c.wg[id]++ } func (c *Counter) AddErr() { c.mu.Lock() defer c.mu.Unlock() c.err++ } func (c *Counter) DelWG(id int) { c.mu.Lock() defer c.mu.Unlock() c.wg[id]-- } func (c *Counter) GetUser() (ret int) { c.mu.Lock() defer c.mu.Unlock() ret = c.user return } func (c *Counter) GetDup() (ret int) { c.mu.Lock() defer c.mu.Unlock() ret = c.dup return } func (c *Counter) GetLog() (ret int) { c.mu.Lock() defer c.mu.Unlock() ret = c.log return } func (c *Counter) GetErr() (ret int) { c.mu.Lock() defer c.mu.Unlock() ret = c.err return } func (c *Counter) GetRem() (ret int) { c.mu.Lock() defer c.mu.Unlock() ret = c.rem return } func (c *Counter) GetWG(id int) (ret int) { c.mu.Lock() defer c.mu.Unlock() ret = c.wg[id] return }