package lock import "sync" // Queue 定义一个泛型队列结构 type Queue[T any] struct { items []T lock sync.RWMutex // 添加读写锁 } // NewQueue 创建一个新的队列 func NewQueue[T any]() *Queue[T] { return &Queue[T]{ items: make([]T, 0), } } // Enqueue 入队操作 - 将元素添加到队列末尾 func (q *Queue[T]) Enqueue(item T) { q.lock.Lock() // 写操作需要写锁 defer q.lock.Unlock() q.items = append(q.items, item) } // Dequeue 出队操作 - 从队列头部移除并返回元素 func (q *Queue[T]) Dequeue() (T, bool) { q.lock.Lock() // 写操作需要写锁 defer q.lock.Unlock() var zero T if len(q.items) == 0 { return zero, false } item := q.items[0] q.items = q.items[1:] return item, true } // Peek 查看队列头部元素但不移除 func (q *Queue[T]) Peek() (T, bool) { q.lock.RLock() // 读操作使用读锁 defer q.lock.RUnlock() var zero T if len(q.items) == 0 { return zero, false } return q.items[0], true } // IsEmpty 检查队列是否为空 func (q *Queue[T]) IsEmpty() bool { q.lock.RLock() // 读操作使用读锁 defer q.lock.RUnlock() return len(q.items) == 0 } // Size 返回队列中的元素个数 func (q *Queue[T]) Size() int { q.lock.RLock() // 读操作使用读锁 defer q.lock.RUnlock() return len(q.items) } // Clear 清空队列 func (q *Queue[T]) Clear() { q.lock.Lock() // 写操作需要写锁 defer q.lock.Unlock() q.items = make([]T, 0) }