| 12345678910111213141516171819202122232425 |
- package util
- // Semaphore implements a non-weighted semaphore for restricting
- // concurrent access to a limited number of processes.
- type Semaphore struct {
- s chan bool
- }
- // Acquire blocks until access can be granted to the caller
- func (s *Semaphore) Acquire() {
- s.s <- true
- }
- // Return releases access from the caller, opening it for acquisition
- func (s *Semaphore) Return() {
- <-s.s
- }
- // NewSemaphore creates a new Semaphore that allows max number of
- // concurrent access
- func NewSemaphore(max int) *Semaphore {
- return &Semaphore{
- s: make(chan bool, max),
- }
- }
|