github.com/MetalBlockchain/metalgo@v1.11.9/utils/math/sync_averager.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package math 5 6 import ( 7 "sync" 8 "time" 9 ) 10 11 type syncAverager struct { 12 lock sync.RWMutex 13 averager Averager 14 } 15 16 func NewSyncAverager(averager Averager) Averager { 17 return &syncAverager{ 18 averager: averager, 19 } 20 } 21 22 func (a *syncAverager) Observe(value float64, currentTime time.Time) { 23 a.lock.Lock() 24 defer a.lock.Unlock() 25 26 a.averager.Observe(value, currentTime) 27 } 28 29 func (a *syncAverager) Read() float64 { 30 a.lock.RLock() 31 defer a.lock.RUnlock() 32 33 return a.averager.Read() 34 }