并发安全处理

This commit is contained in:
kercylan98 2023-06-01 14:04:58 +08:00
parent 6947524586
commit ef00111357
2 changed files with 13 additions and 0 deletions

View File

@ -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)
}

View File

@ -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()
}