并发安全处理
This commit is contained in:
parent
6947524586
commit
ef00111357
|
@ -3,6 +3,7 @@ package report
|
|||
import (
|
||||
"github.com/kercylan98/minotaur/utils/asynchronization"
|
||||
"github.com/kercylan98/minotaur/utils/hash"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// NewDataBuried 创建一个数据埋点
|
||||
|
@ -32,6 +33,7 @@ type DataBuried[DataID comparable, Data any] struct {
|
|||
hitLogic HitLogic[Data]
|
||||
getData func(DataID) Data
|
||||
setData func(id DataID, data Data)
|
||||
rw sync.RWMutex
|
||||
}
|
||||
|
||||
// GetName 获取名称
|
||||
|
@ -41,11 +43,15 @@ func (slf *DataBuried[DataID, Data]) GetName() string {
|
|||
|
||||
// Hit 命中数据埋点
|
||||
func (slf *DataBuried[DataID, Data]) Hit(id DataID, data Data) {
|
||||
slf.rw.Lock()
|
||||
defer slf.rw.Unlock()
|
||||
slf.setData(id, slf.hitLogic(slf.getData(id), data))
|
||||
}
|
||||
|
||||
// GetData 获取数据
|
||||
func (slf *DataBuried[DataID, Data]) GetData(id DataID) Data {
|
||||
slf.rw.RLock()
|
||||
defer slf.rw.RUnlock()
|
||||
return slf.getData(id)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package report
|
||||
|
||||
import "sync"
|
||||
|
||||
// NewGlobalBuried 创建一个全局埋点
|
||||
func NewGlobalBuried[Data any](name string, hitLogic HitLogic[Data], options ...GlobalBuriedOption[Data]) *GlobalBuried[Data] {
|
||||
buried := &GlobalBuried[Data]{
|
||||
|
@ -26,6 +28,7 @@ type GlobalBuried[Data any] struct {
|
|||
hitLogic HitLogic[Data]
|
||||
getData func() Data
|
||||
setData func(data Data)
|
||||
rw sync.RWMutex
|
||||
}
|
||||
|
||||
// GetName 获取名称
|
||||
|
@ -35,10 +38,14 @@ func (slf *GlobalBuried[Data]) GetName() string {
|
|||
|
||||
// Hit 命中数据埋点
|
||||
func (slf *GlobalBuried[Data]) Hit(data Data) {
|
||||
slf.rw.Lock()
|
||||
defer slf.rw.Unlock()
|
||||
slf.setData(slf.hitLogic(slf.getData(), data))
|
||||
}
|
||||
|
||||
// GetData 获取数据
|
||||
func (slf *GlobalBuried[Data]) GetData() Data {
|
||||
slf.rw.RLock()
|
||||
defer slf.rw.RUnlock()
|
||||
return slf.getData()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue