safe_queue

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2023 License: MulanPSL-2.0 Imports: 6 Imported by: 0

README

模块说明

无锁并发安全可阻塞 FIFO 队列

快速使用

// 定义元素类型
type Task struct {
// ...
}

// 初始化队列
q := queue.New[*Task](1 >> 8) // 容量为256

// 往队列填充数据
q.Put(&Task{})

// 往队列填充多个数据
tasks := []*Task{}
q.PutEnough(tasks...)

// 查看此时队列里数据个数
q.Len()

// 查询队列容量
q.Cap()

// 取出最开始填的一个数据
q.Get()

// 取出多个数据
q.GetEnough(3)

// 取出数据,若队列无数据则等待
q.MustGet()

联系电邮:ivfzhou@126.com

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrQueueIsFull 表明队列已满。
	ErrQueueIsFull = errors.New("队列已满")
	// ErrQueueIsEmpty 表明队列为空。
	ErrQueueIsEmpty = errors.New("队列为空")
)

Functions

This section is empty.

Types

type Queue

type Queue[E any] struct {
	// contains filtered or unexported fields
}

Queue 队列结构体。使用 New 创建变量。

func New

func New[E any](capacity uint32) *Queue[E]

New 创建队列。capacity 队列长度。值将调整为以2为底的幂数,最小值为2,最大值为2^31。最终队列容量将大于capacity。

func (*Queue[E]) Cap

func (q *Queue[E]) Cap() uint32

Cap 返回队列长度。

func (*Queue[E]) Get

func (q *Queue[E]) Get() (E, uint32, error)

Get 取出队列头部数据。返回队列数据,队列剩余可取个数。当无数据可取时返回错误 ErrQueueIsEmpty。

func (*Queue[E]) GetEnough

func (q *Queue[E]) GetEnough(size uint32) ([]E, uint32, uint32)

GetEnough 从队列取出多个数据。返回队列队列数据,实际取出数据个数,剩余可取数据个数。

func (*Queue[E]) IsEmpty

func (q *Queue[E]) IsEmpty() bool

IsEmpty 判断队列是否有数据。

func (*Queue[E]) IsFull

func (q *Queue[E]) IsFull() bool

IsFull 判断队列是否已满。

func (*Queue[E]) Len

func (q *Queue[E]) Len() uint32

Len 返回队列数据个数。

func (*Queue[E]) MustGet

func (q *Queue[E]) MustGet() (E, uint32)

MustGet 取出队列头部数据。,若队列无数据将等待。返回队列数据,队列剩余可取个数。

func (*Queue[E]) MustPut

func (q *Queue[E]) MustPut(value E) uint32

MustPut 向队列中塞数据,若队列已满将等待。返回剩余可填充数据个数。

func (*Queue[E]) Put

func (q *Queue[E]) Put(value E) (uint32, error)

Put 向队列尾部填充数据。返回剩余可填充数据个数。若队列已满返回错误 ErrQueueIsFull。

func (*Queue[E]) PutEnough

func (q *Queue[E]) PutEnough(values ...E) (uint32, uint32)

PutEnough 向队列填充多个数据。返回实际填充数据个数,剩余可填充数据个数。

func (*Queue[E]) String

func (q *Queue[E]) String() string

String 返回队列字符串表示形式值。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL