1 Star 0 Fork 0

magicianlyx / GoLog

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
status_settle_map.go 1.64 KB
一键复制 编辑 原始数据 按行查看 历史
magicianlyx 提交于 2022-01-24 17:45 . -
package pool
import (
"sync"
"time"
)
// 多线程状态总结(线程安全)
type StatusSettleMap struct {
l sync.RWMutex
m map[GoroutineStatus]*StatusSettle
}
func NewStatusSettleMap() *StatusSettleMap {
return &StatusSettleMap{
l: sync.RWMutex{},
m: make(map[GoroutineStatus]*StatusSettle),
}
}
func (m *StatusSettleMap) getOrCreate(status GoroutineStatus, duration time.Duration) *StatusSettle {
if settle, ok := m.m[status]; ok {
return settle
} else {
settle := NewStatusSettle(status, duration)
m.m[status] = settle
return settle
}
}
func (m *StatusSettleMap) GetOrCreate(status GoroutineStatus, duration time.Duration) *StatusSettle {
m.l.Lock()
defer m.l.Unlock()
return m.getOrCreate(status, duration)
}
func (m *StatusSettleMap) AddStatusDuration(status GoroutineStatus, duration time.Duration) {
m.l.Lock()
defer m.l.Unlock()
m.getOrCreate(status, 0).AddDuration(duration)
}
func (m *StatusSettleMap) AddMultiStatusDuration(multiStatusDuration map[GoroutineStatus]time.Duration) {
m.l.Lock()
defer m.l.Unlock()
for status := range multiStatusDuration {
duration := multiStatusDuration[status]
m.getOrCreate(status, 0).AddDuration(duration)
}
}
func (m *StatusSettleMap) getAllStatusDuration() map[GoroutineStatus]time.Duration {
multiStatusDuration := make(map[GoroutineStatus]time.Duration)
for status := range m.m {
duration := m.m[status].GetDuration()
multiStatusDuration[status] = multiStatusDuration[status] + duration
}
return multiStatusDuration
}
func (m *StatusSettleMap) GetAllStatusDuration() map[GoroutineStatus]time.Duration {
m.l.RLock()
defer m.l.RUnlock()
return m.getAllStatusDuration()
}
Go
1
https://gitee.com/magicianlyx/GoLog.git
git@gitee.com:magicianlyx/GoLog.git
magicianlyx
GoLog
GoLog
20c45f9b998d

搜索帮助

53164aa7 5694891 3bd8fe86 5694891