File tree 2 files changed +10
-4
lines changed
2 files changed +10
-4
lines changed Original file line number Diff line number Diff line change @@ -41,7 +41,7 @@ type node struct {
41
41
data interface {}
42
42
}
43
43
44
- type nodes []* node
44
+ type nodes []node
45
45
46
46
// RingBuffer is a MPMC buffer that achieves threadsafety with CAS operations
47
47
// only. A put on full or get on empty call will block until an item
@@ -64,7 +64,7 @@ func (rb *RingBuffer) init(size uint64) {
64
64
size = roundUp (size )
65
65
rb .nodes = make (nodes , size )
66
66
for i := uint64 (0 ); i < size ; i ++ {
67
- rb .nodes [i ] = & node {position : i }
67
+ rb .nodes [i ] = node {position : i }
68
68
}
69
69
rb .mask = size - 1 // so we don't have to do this with every put/get operation
70
70
}
93
93
return false , ErrDisposed
94
94
}
95
95
96
- n = rb .nodes [pos & rb .mask ]
96
+ n = & rb .nodes [pos & rb .mask ]
97
97
seq := atomic .LoadUint64 (& n .position )
98
98
switch dif := seq - pos ; {
99
99
case dif == 0 :
146
146
return nil , ErrDisposed
147
147
}
148
148
149
- n = rb .nodes [pos & rb .mask ]
149
+ n = & rb .nodes [pos & rb .mask ]
150
150
seq := atomic .LoadUint64 (& n .position )
151
151
switch dif := seq - (pos + 1 ); {
152
152
case dif == 0 :
Original file line number Diff line number Diff line change @@ -396,3 +396,9 @@ func BenchmarkRBGet(b *testing.B) {
396
396
rb .Get ()
397
397
}
398
398
}
399
+
400
+ func BenchmarkRBAllocation (b * testing.B ) {
401
+ for i := 0 ; i < b .N ; i ++ {
402
+ NewRingBuffer (1024 )
403
+ }
404
+ }
You can’t perform that action at this time.
0 commit comments