Если разрешение не освободилось — сдаться, а не ждать вечно. Реализуйте acquireWithTimeout(sem chan struct{}, timeout) bool: select по отправке в sem или time.After.
- Задача
- Решение
- Обсуждение
AcquireWithTimeout: семафор с таймаутом
GolangРешение
func acquireWithTimeout(sem chan struct{}, timeout time.Duration) bool {
select {
case sem <- struct{}{}:
return true
case <-time.After(timeout):
return false
}
}