千家信息网

qemu 队列的实现原理是什么

发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,今天就跟大家聊聊有关qemu 队列的实现原理是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。#define QLIST_HEAD(name
千家信息网最后更新 2024年11月24日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)


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

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

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


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

0