Написать реализацию интерфейса Mutex
type Mutex interface {
Lock()
Unlock()
LockChannel() <-chan struct{}
}в файле mutex_impl.go. В этом файле уже содержится конструктор
func New() Mutex {
// TODO
return ...
}с пустым телом. Нужно отдать в конструкторе реализацию мьютекса Mutex.
- Как обычный мьютекс
mu := contest.New()
mu.Lock()
// doing under lock
mu.Unlock()- Как
LockChannelмьютекс
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
select {
case <-ctx.Done():
// nop
case <-mu.LockChannel():
// doing under lock
mu.Unlock()
}