50fbc2eec2
* CI: use staticcheck for linting This commit switches the linter for Go code from golint to staticcheck. Golint has been deprecated since last year and staticcheck is a recommended replacement. Signed-off-by: Lucas Servén Marín <lserven@gmail.com> * revendor Signed-off-by: Lucas Servén Marín <lserven@gmail.com> * cmd,pkg: fix lint warnings Signed-off-by: Lucas Servén Marín <lserven@gmail.com>
37 lines
498 B
Go
37 lines
498 B
Go
package sync
|
|
|
|
type Semaphore struct {
|
|
ch chan struct{}
|
|
}
|
|
|
|
func NewSemaphore(size int) Semaphore {
|
|
return Semaphore{
|
|
ch: make(chan struct{}, size),
|
|
}
|
|
}
|
|
|
|
func (sem Semaphore) Acquire() {
|
|
sem.ch <- struct{}{}
|
|
}
|
|
|
|
func (sem Semaphore) AcquireMaybe() bool {
|
|
select {
|
|
case sem.ch <- struct{}{}:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
func (sem Semaphore) Release() {
|
|
<-sem.ch
|
|
}
|
|
|
|
func (sem Semaphore) Len() int {
|
|
return len(sem.ch)
|
|
}
|
|
|
|
func (sem Semaphore) Cap() int {
|
|
return cap(sem.ch)
|
|
}
|