Documentation ¶
Overview ¶
Package queue provides a lock-free queue and two-Lock concurrent queue which use the algorithm proposed by Michael and Scott. https://doi.org/10.1145/248052.248106.
see pseudocode at https://www.cs.rochester.edu/research/synchronization/pseudocode/queues.html It will be refactored after go generic is released.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type BoundedQueue ¶
type BoundedQueue[T any] struct { // contains filtered or unexported fields }
BoundedQueue is a threadsafe bounded queue.
func NewBoundedQueue ¶
func NewBoundedQueue[T any](n uint32) *BoundedQueue[T]
NewBoundedQueue create a BoundedQueue.
func (*BoundedQueue[T]) Dequeue ¶
func (q *BoundedQueue[T]) Dequeue() T
Dequeue removes and returns the value at the head of the queue. It will be blocked if the queue is empty.
func (*BoundedQueue[T]) Enqueue ¶
func (q *BoundedQueue[T]) Enqueue(v T)
Enqueue puts the given value v at the tail of the queue. If this queue if full, the caller will be blocked.
type CQueue ¶
type CQueue[T any] struct { // contains filtered or unexported fields }
CQueue is a concurrent unbounded queue which uses two-Lock concurrent queue qlgorithm.
type LKQueue ¶
type LKQueue[T any] struct { // contains filtered or unexported fields }
LKQueue is a lock-free unbounded queue.
type Queue ¶
type Queue[T any] interface { Enqueue(v T) Dequeue() T }
Queue is a FIFO data structure. Enqueue puts a value into its tail, Dequeue removes a value from its head.
type SliceQueue ¶
type SliceQueue[T any] struct { // contains filtered or unexported fields }
SliceQueue is an unbounded queue which uses a slice as underlying.
func NewSliceQueue ¶
func NewSliceQueue[T any](n int) (q *SliceQueue[T])
NewSliceQueue returns an empty queue.
func (*SliceQueue[T]) Dequeue ¶
func (q *SliceQueue[T]) Dequeue() T
Dequeue removes and returns the value at the head of the queue. It returns nil if the queue is empty.
func (*SliceQueue[T]) Enqueue ¶
func (q *SliceQueue[T]) Enqueue(v T)
Enqueue puts the given value v at the tail of the queue.