MCPcopy Index your code
hub / github.com/panjf2000/gnet / TestLockFreeQueue

Function TestLockFreeQueue

pkg/queue/queue_test.go:11–59  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

9)
10
11func TestLockFreeQueue(t *testing.T) {
12 const taskNum = 10000
13 q := queue.NewLockFreeQueue()
14 var wg sync.WaitGroup
15 wg.Add(4)
16 go func() {
17 for i := 0; i < taskNum; i++ {
18 task := &queue.Task{}
19 q.Enqueue(task)
20 }
21 wg.Done()
22 }()
23 go func() {
24 for i := 0; i < taskNum; i++ {
25 task := &queue.Task{}
26 q.Enqueue(task)
27 }
28 wg.Done()
29 }()
30
31 var counter int32
32 go func() {
33 for {
34 task := q.Dequeue()
35 if task != nil {
36 atomic.AddInt32(&counter, 1)
37 }
38 if task == nil && atomic.LoadInt32(&counter) == 2*taskNum {
39 break
40 }
41 }
42 wg.Done()
43 }()
44 go func() {
45 for {
46 task := q.Dequeue()
47 if task != nil {
48 atomic.AddInt32(&counter, 1)
49 }
50 if task == nil && atomic.LoadInt32(&counter) == 2*taskNum {
51 break
52 }
53 }
54 wg.Done()
55 }()
56 wg.Wait()
57
58 t.Logf("sent and received all %d tasks", 2*taskNum)
59}

Callers

nothing calls this directly

Calls 4

NewLockFreeQueueFunction · 0.92
DoneMethod · 0.80
EnqueueMethod · 0.65
DequeueMethod · 0.65

Tested by

no test coverage detected