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

LoadOrStore: вычисление вне мьютекса

Не держи мьютекс во время долгого вычисления. Реализуйте LoadOrStore(key string, compute func() int) int: под мьютексом только проверка map и вставка, compute — без блокировки.

GolangРешение
func (s *Store) LoadOrStore(key string, compute func() int) int {
	s.mu.Lock()
	if v, ok := s.m[key]; ok {
		s.mu.Unlock()
		return v
	}
	s.mu.Unlock()
	v := compute()
	s.mu.Lock()
	s.m[key] = v
	s.mu.Unlock()
	return v
}

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

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

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