• Задача
  • Решение
  • Обсуждение

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
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

00:00:00
Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки