新增了queue队列容器,实现了线程安全,修复了参数问题

This commit is contained in:
hlccd 2021-10-21 22:20:25 +08:00 committed by GitHub
parent 78b0dd1ee5
commit c89f92364b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -11,6 +11,7 @@ package queue
// 通过并发控制锁保证了在高并发过程中的数据一致性 // 通过并发控制锁保证了在高并发过程中的数据一致性
import ( import (
"github.com/hlccd/goSTL/utils/iterator"
"sync" "sync"
) )
@ -34,7 +35,8 @@ type queue struct {
//对应函数介绍见下方 //对应函数介绍见下方
type queuer interface { type queuer interface {
Size() (num uint64) //返回该队列中元素的使用空间大小 Iterator() (i *Iterator.Iterator) //返回包含队列中所有元素的迭代器
Size() (size uint64) //返回该队列中元素的使用空间大小
Clear() //清空该队列 Clear() //清空该队列
Empty() (b bool) //判断该队列是否为空 Empty() (b bool) //判断该队列是否为空
Push(e interface{}) //将元素e添加到该队列末尾 Push(e interface{}) //将元素e添加到该队列末尾
@ -61,6 +63,25 @@ func New() (q *queue) {
} }
} }
//@title Iterator
//@description
// 以queue队列容器做接收者
// 将queue队列容器中不使用空间释放掉
//@return q *queue 接收者的queue指针
//@param nil
//@return i *iterator.Iterator 新建的Iterator迭代器指针
func (q *queue) Iterator() (i *Iterator.Iterator) {
if q == nil {
q = New()
}
q.mutex.Lock()
tmp := make([]interface{}, q.end-q.begin, q.end-q.begin)
copy(tmp, q.data[q.begin:q.end])
i = Iterator.New(&tmp)
q.mutex.Unlock()
return i
}
//@title Size //@title Size
//@description //@description
// 以queue队列容器做接收者 // 以queue队列容器做接收者
@ -69,8 +90,8 @@ func New() (q *queue) {
// 若容器为空则返回0 // 若容器为空则返回0
//@receiver q *queue 接受者queue的指针 //@receiver q *queue 接受者queue的指针
//@param nil //@param nil
//@return num int 容器中实际使用元素所占空间大小 //@return size uint64 容器中实际使用元素所占空间大小
func (q *queue) Size() (num uint64) { func (q *queue) Size() (size uint64) {
if q == nil { if q == nil {
q = New() q = New()
} }