Бронирование — проверить места, уменьшить счётчик, добавить в bookings: один инвариант. Реализуйте Seats.Book: весь инвариант в одной секции.
- Задача
- Решение
- Обсуждение
Seats: бронирование одной секцией
GolangРешение
func (s *Seats) Book(id int) bool {
s.mu.Lock()
defer s.mu.Unlock()
if s.seatsLeft <= 0 {
return false
}
s.seatsLeft--
if s.bookings == nil {
s.bookings = make(map[int]bool)
}
s.bookings[id] = true
return true
}