zeromq分析-1-yqueue实现

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 [N];
             chunk_t *prev;
             chunk_t *next;
        };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值