您的位置:首页 > 产品设计 > UI/UE

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;
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: