Написать реализацию интерфейса 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()
}