1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/tym_hmm-rabbitmq-pool-go

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
RabbitQueue.go 883 Байты
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
hmm Отправлено 22.10.2021 06:55 39c633e
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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/tym_hmm-rabbitmq-pool-go.git
git@api.gitlife.ru:oschina-mirror/tym_hmm-rabbitmq-pool-go.git
oschina-mirror
tym_hmm-rabbitmq-pool-go
tym_hmm-rabbitmq-pool-go
master