Metrics: инвариант пары под мьютексом
Пара total/count обновляется атомиками по отдельности, и среднее «прыгает». Реализуйте Metrics: Record и Average — оба под одним мьютексом.
Показать решение
GolangРешение
func (m *Metrics) Record(x int64) {
m.mu.Lock()
defer m.mu.Unlock()
m.total += x
m.count++
}
func (m *Metrics) Average() int64 {
m.mu.Lock()
defer m.mu.Unlock()
if m.count == 0 {
return 0
}
return m.total / m.count
}Записаться на разбор
10 000 ₽ · 60 минут · онлайн