diff --git a/report/data_buried.go b/report/data_buried.go index f502b54..6249108 100644 --- a/report/data_buried.go +++ b/report/data_buried.go @@ -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) } diff --git a/report/global_buried.go b/report/global_buried.go index 563d042..cc6a7d6 100644 --- a/report/global_buried.go +++ b/report/global_buried.go @@ -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() }