zeromq分析-1-yqueue实现
2016-10-17 22:52
281 查看
yqueue是zeromq中实现的一个队列。
// Create the queue. // yqueue初始化函数。 inline yqueue_t () { begin_chunk = (chunk_t*) malloc (sizeof (chunk_t)); alloc_assert (begin_chunk); begin_pos = 0; back_chunk = NULL; //初始化完成后back_chunk为NULL,那么此时操作back()等函数会引起空指针错误,需要特别注意。话说回来,可以见到zeromq的代码为了提高效率(或者作者认为有些API只是内部使用,只要他自己熟悉怎么用就好了)所以并没有良好的健壮性。 back_pos = 0; end_chunk = begin_chunk; end_pos = 0; } // Returns reference to the front element of the queue. // If the queue is empty, behaviour is undefined. // 返回yqueue头的元素。 inline T &front () { return begin_chunk->values [begin_pos]; } // Returns reference to the back element of the queue. // If the queue is empty, behaviour is undefined. // 返回yqueue的尾端位置T类型的引用,可以给此引用赋值。 // 注意,在yqueue初始化的时候back_chunk赋值为NULL,因为要首先执行一次push()操作(即首先需要向yqueue中添加一个T类型空间),然后才能执行back()。这样其实也是可以理解的,即对于空的queue获得元素空间的行为是错误的。 inline T &back () { return back_chunk->values [back_pos]; } // Individual memory chunk to hold N elements. // 在内存不足的时候yqueue会一次性分配一个chunk_t结构,chunk_t结构中包含有N个T大小的空间。chunk_t有prev和next指针,是一个双向链表节点。 struct chunk_t { T values ; chunk_t *prev; chunk_t *next; };
相关文章推荐
- 网络协议栈实现分析6--Wait_queue等待队列
- Waitqueue、Event及Semaphore的实现机制分析
- Java多线程(五)之BlockingQueue深入分析及其实现类实现方式分析
- 聊聊并发(六)ConcurrentLinkedQueue的实现原理分析
- 聊聊并发(6)ConcurrentLinkedQueue的实现原理分析
- ip_queue的实现分析
- Java并发编程(七)ConcurrentLinkedQueue的实现原理和源码分析
- 笔试算法题(57):基于堆的优先级队列实现和性能分析(Priority Queue based on Heap)
- Java Collections Framework之Queue(LinkedList实现)源码分析(基于JDK1.6)
- ConcurrentLinkedQueue的实现原理分析
- ip_queue的实现分析
- Nginx源码学习-双向链表(ngx_queue_t)实现及实例分析
- 聊聊并发(六)ConcurrentLinkedQueue的实现原理分析
- ConcurrentLinkedQueue的实现原理分析
- 聊聊并发(六)——ConcurrentLinkedQueue的实现原理分析
- ConcurrentLinkedQueue的实现原理分析
- 聊聊并发(六)——ConcurrentLinkedQueue的实现原理分析
- ConcurrentLinkedQueue的实现原理分析
- 聊聊并发——ConcurrentLinkedQueue的实现原理分析
- ConcurrentLinkedQueue 的实现原理分析