代码拉取完成,页面将自动刷新
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()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。