如何理解队列?
先进者先出就是典型的队列。队列的基本操作也只有两个:入队(enqueue)放一个数据在队尾,出队(dequeue)从队列头部取一个数据。所以队列和栈一样也是一种受限的线性表数据结构。
队列和数组一样也是可以由数组和链表来实现,用数组实现的队列叫顺序队列,用链表实现的队列叫链式队列。
对于栈来说只需要一个栈顶指针就可以了,但是队列需要两个指针,一个是head指针,指向头,一个是tail指针,指向尾。
队列阻塞和并发队列
队列为空时从队列头部取数据就会为空,队列满时从队列尾部插入数据就会阻塞。这是一个生产者-消费者模式。
线程安全的队列我们叫做并发队列。最简单直接的方法就是在enqueue,dequeue方法上加锁,加的锁粒度大,并发度就会低,同一时刻只允许存或者取一个操作。实际上,基于数组的循环队列,利用CAS原子操作,可以实现非常高效的并发队列。
网友评论