qemu 队列的实现原理是什么

今天就跟大家聊聊有关qemu 队列的实现原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

#define QLIST_HEAD(name, type)                                          \

struct name {                                                           \

        struct type *lh_first;  /* first element */                     \

}


#define QLIST_HEAD_INITIALIZER(head)                                    \

        { NULL }


#define QLIST_ENTRY(type)                                               \

struct {                                                                \

        struct type *le_next;   /* next element */                      \

        struct type **le_prev;  /* address of previous next element */  \

}


/*

 * List functions.

 */

#define QLIST_INIT(head) do {                                           \

        (head)->lh_first = NULL;                                        \

} while (/*CONSTCOND*/0)


#define QLIST_INSERT_AFTER(listelm, elm, field) do {                    \

        if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)  \

                (listelm)->field.le_next->field.le_prev =               \

                    &(elm)->field.le_next;                              \

        (listelm)->field.le_next = (elm);                               \

        (elm)->field.le_prev = &(listelm)->field.le_next;               \

} while (/*CONSTCOND*/0)


#define QLIST_INSERT_BEFORE(listelm, elm, field) do {                   \

        (elm)->field.le_prev = (listelm)->field.le_prev;                \

        (elm)->field.le_next = (listelm);                               \

        *(listelm)->field.le_prev = (elm);                              \

        (listelm)->field.le_prev = &(elm)->field.le_next;               \

} while (/*CONSTCOND*/0)


#define QLIST_INSERT_HEAD(head, elm, field) do {                        \

        if (((elm)->field.le_next = (head)->lh_first) != NULL)          \

                (head)->lh_first->field.le_prev = &(elm)->field.le_next;\

        (head)->lh_first = (elm);                                       \

        (elm)->field.le_prev = &(head)->lh_first;                       \

} while (/*CONSTCOND*/0)


qemu 队列的实现原理是什么

node->next  就是指向下一个节点,

node->prev就是指向上一个节点的entry,所以*(node->prev)就是上一个节点的next域的地址了

也就是说( *node->prev ) ->next ==node


看完上述内容,你们对qemu 队列的实现原理是什么有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。