diff --git a/idle/idle.go b/idle/idle.go index 5f3d2d7..105bb75 100644 --- a/idle/idle.go +++ b/idle/idle.go @@ -2,10 +2,32 @@ package idle import ( + "fmt" "sync/atomic" "time" ) +var ( + gIdler atomic.Pointer[idler] +) + +func Wait(timeout time.Duration) error { + i := CreateIdler(timeout).(*idler) + ok := gIdler.CompareAndSwap(nil, i) + if !ok { + return fmt.Errorf("idler already waiting") + } + i.Wait() + return nil +} + +func Tick() { + i := gIdler.Load() + if i != nil { + i.Tick() + } +} + type Idler interface { Enter() Exit()