diff options
Diffstat (limited to 'cli/internal/util/semaphore.go')
| -rw-r--r-- | cli/internal/util/semaphore.go | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/cli/internal/util/semaphore.go b/cli/internal/util/semaphore.go deleted file mode 100644 index ef29df0..0000000 --- a/cli/internal/util/semaphore.go +++ /dev/null @@ -1,43 +0,0 @@ -package util - -// Semaphore is a wrapper around a channel to provide -// utility methods to clarify that we are treating the -// channel as a semaphore -type Semaphore chan struct{} - -// NewSemaphore creates a semaphore that allows up -// to a given limit of simultaneous acquisitions -func NewSemaphore(n int) Semaphore { - if n <= 0 { - panic("semaphore with limit <=0") - } - ch := make(chan struct{}, n) - return Semaphore(ch) -} - -// Acquire is used to acquire an available slot. -// Blocks until available. -func (s Semaphore) Acquire() { - s <- struct{}{} -} - -// TryAcquire is used to do a non-blocking acquire. -// Returns a bool indicating success -func (s Semaphore) TryAcquire() bool { - select { - case s <- struct{}{}: - return true - default: - return false - } -} - -// Release is used to return a slot. Acquire must -// be called as a pre-condition. -func (s Semaphore) Release() { - select { - case <-s: - default: - panic("release without an acquire") - } -} |
