package semaphore
import "github.com/eapache/go-resiliency/semaphore"
Package semaphore implements the semaphore resiliency pattern for Go.
Index ¶
Examples ¶
Variables ¶
ErrNoTickets is the error returned by Acquire when it could not acquire a ticket from the semaphore within the configured timeout.
Types ¶
type Semaphore ¶
type Semaphore struct {
// contains filtered or unexported fields
}
Semaphore implements the semaphore resiliency pattern
Code:
Example¶
{
sem := New(3, 1*time.Second)
for i := 0; i < 10; i++ {
go func() {
if err := sem.Acquire(); err != nil {
return //could not acquire semaphore
}
defer sem.Release()
// do something semaphore-guarded
}()
}
}
func New ¶
New constructs a new Semaphore with the given ticket-count and timeout.
func (*Semaphore) Acquire ¶
Acquire tries to acquire a ticket from the semaphore. If it can, it returns nil. If it cannot after "timeout" amount of time, it returns ErrNoTickets. It is safe to call Acquire concurrently on a single Semaphore.
func (*Semaphore) IsEmpty ¶
IsEmpty will return true if no tickets are being held at that instant. It is safe to call concurrently with Acquire and Release, though do note that the result may then be unpredictable.
func (*Semaphore) Release ¶
func (s *Semaphore) Release()
Release releases an acquired ticket back to the semaphore. It is safe to call Release concurrently on a single Semaphore. It is an error to call Release on a Semaphore from which you have not first acquired a ticket.
Source Files ¶
- Version
- v1.7.0 (latest)
- Published
- Jul 19, 2024
- Platform
- linux/amd64
- Imports
- 2 packages
- Last checked
- 1 week ago –
Tools for package owners.