| 123456789101112131415161718192021222324252627282930313233343536 |
- 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)
- }
|