Hunter0x7c7
2022-08-11 b8230139fb40edea387617b6accd8371e37eda58
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package semaphore
 
// Instance is an implementation of semaphore.
type Instance struct {
    token chan struct{}
}
 
// New create a new Semaphore with n permits.
func New(n int) *Instance {
    s := &Instance{
        token: make(chan struct{}, n),
    }
    for i := 0; i < n; i++ {
        s.token <- struct{}{}
    }
    return s
}
 
// Wait returns a channel for acquiring a permit.
func (s *Instance) Wait() <-chan struct{} {
    return s.token
}
 
// Signal releases a permit into the semaphore.
func (s *Instance) Signal() {
    s.token <- struct{}{}
}