parent
75acf1f3dd
commit
0ec5a62438
@ -3,14 +3,12 @@ package lock_free
|
|||||||
import "time"
|
import "time"
|
||||||
|
|
||||||
type DelayLkQueue[T any] struct {
|
type DelayLkQueue[T any] struct {
|
||||||
gap time.Duration // 控制监听重试间隔
|
|
||||||
LkQueue[T]
|
LkQueue[T]
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewDelayLkQueue 创建延迟无锁队列
|
// NewDelayLkQueue 创建延迟无锁队列
|
||||||
func NewDelayLkQueue[T any](opt ...Option) *DelayLkQueue[T] {
|
func NewDelayLkQueue[T any]() *DelayLkQueue[T] {
|
||||||
opts := loadOptions(opt...)
|
return &DelayLkQueue[T]{*NewLkQueue[T]()}
|
||||||
return &DelayLkQueue[T]{opts.gap, *NewLkQueue[T]()}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// DelayEnqueue 延迟入队
|
// DelayEnqueue 延迟入队
|
||||||
@ -28,7 +26,7 @@ func (q *DelayLkQueue[T]) ContinuousDequeue(notify ...chan T) {
|
|||||||
n <- value
|
n <- value
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
time.Sleep(q.gap) // 队列为空,休眠重试
|
time.Sleep(time.Millisecond) // 队列为空,休眠1毫秒
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ func TestDelayLkQueue(t *testing.T) {
|
|||||||
{1, time.Second},
|
{1, time.Second},
|
||||||
{3, time.Second * 3},
|
{3, time.Second * 3},
|
||||||
}
|
}
|
||||||
q := NewDelayLkQueue[int](WithGap(time.Millisecond * 100))
|
q := NewDelayLkQueue[int]()
|
||||||
|
|
||||||
for _, c := range cases {
|
for _, c := range cases {
|
||||||
q.DelayEnqueue(c.value, c.duration)
|
q.DelayEnqueue(c.value, c.duration)
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
package lock_free
|
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
// Options 无锁队列选项
|
|
||||||
type Options struct {
|
|
||||||
gap time.Duration
|
|
||||||
}
|
|
||||||
|
|
||||||
type Option func(*Options)
|
|
||||||
|
|
||||||
func loadOptions(opt ...Option) Options {
|
|
||||||
opts := Options{
|
|
||||||
gap: time.Millisecond,
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, o := range opt {
|
|
||||||
o(&opts)
|
|
||||||
}
|
|
||||||
|
|
||||||
return opts
|
|
||||||
}
|
|
||||||
|
|
||||||
func WithGap(gap time.Duration) Option {
|
|
||||||
return func(o *Options) {
|
|
||||||
o.gap = gap
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user