Слияние кода завершено, страница обновится автоматически
package kelleyRabbimqPool
import (
"sync"
"sync/atomic"
)
/**
rabbitMq 通用队列
*/
type Node struct {
data *rChannel
next *Node
}
type ChannelQueue struct {
head *Node
end *Node
l int32
rlock sync.Mutex
}
func NewChannelQueue() *ChannelQueue {
q := &ChannelQueue{head: nil, end: nil, l: 0}
return q
}
func (q *ChannelQueue) Add(data *rChannel) {
q.rlock.Lock()
defer q.rlock.Unlock()
n := &Node{data: data, next: nil}
atomic.AddInt32(&q.l, 1)
if q.end == nil {
q.head = n
q.end = n
} else {
q.end.next = n
q.end = n
}
return
}
func (q *ChannelQueue) Pop() (*rChannel, bool) {
q.rlock.Lock()
defer q.rlock.Unlock()
if q.head == nil {
return nil, false
}
atomic.AddInt32(&q.l, -1)
data := q.head.data
q.head = q.head.next
if q.head == nil {
q.end = nil
}
return data, true
}
func (q *ChannelQueue)Count() int32 {
return q.l
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )