From 7ae884a559fb9d6e7e2515c3ab4c0e14b2113c0c Mon Sep 17 00:00:00 2001 From: fantasticbin Date: Tue, 3 Dec 2024 10:25:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=BB=B6=E8=BF=9F=E6=97=A0?= =?UTF-8?q?=E9=94=81=E9=98=9F=E5=88=97=E7=9A=84=E6=B5=8B=E8=AF=95=E7=94=A8?= =?UTF-8?q?=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lock_free/delay_queue.go | 5 +++++ lock_free/delay_queue_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 lock_free/delay_queue_test.go 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) +}