diff --git a/lock_free/delay_queue.go b/lock_free/delay_queue.go index 169aa14..64d3f8d 100644 --- a/lock_free/delay_queue.go +++ b/lock_free/delay_queue.go @@ -6,6 +6,11 @@ type DelayLkQueue[T any] struct { LkQueue[T] } +// NewDelayLkQueue 创建延迟无锁队列 +func NewDelayLkQueue[T any]() *DelayLkQueue[T] { + return &DelayLkQueue[T]{*NewLkQueue[T]()} +} + // DelayEnqueue 延迟入队 func (q *DelayLkQueue[T]) DelayEnqueue(value T, duration time.Duration) { time.AfterFunc(duration, func() { diff --git a/lock_free/delay_queue_test.go b/lock_free/delay_queue_test.go new file mode 100644 index 0000000..0d91329 --- /dev/null +++ b/lock_free/delay_queue_test.go @@ -0,0 +1,32 @@ +package lock_free + +import ( + "testing" + "time" +) + +func TestDelayLkQueue(t *testing.T) { + cases := []struct { + value int + duration time.Duration + }{ + {1, time.Second}, + {3, time.Second * 3}, + } + q := NewDelayLkQueue[int]() + + for _, c := range cases { + q.DelayEnqueue(c.value, c.duration) + } + + notidy := make(chan int) + go func() { + for data := range notidy { + t.Log(data) + t.Log(time.Now().Unix()) + } + }() + + go q.ContinuousDequeue(notidy) + time.Sleep(time.Second * 5) +}