天天看點

qemu QLIST資料結構HEADENTRY

queue.h中是qemu使用到的一些基礎的資料結構,比如QLIST,QSLIST,QSIMPLEQ,QTAILQ。

本文主要介紹QLIST的資料結構,其它幾種資料結構與之類似。

需要注意entry是嵌入在其他結構體(elm)中使用,QLIST是elm的連結清單,不是entry的連結清單。

lh_first表示list head first

head的靜态初始化:

head的動态初始化:

le_next表示list entry next,le_prev表示list entry prev

注意le_prev,是兩個星号,是為了删除elm時的*(elm)->field.le_prev /*等效于之前一個elm的le_next*/ = (elm)->field.le_next;,可以在之後的示意圖中詳細看看。

elm是包含entry的結構體,比如:

在head後面插入一個elm:

在某個listelm前面或者後面插入elm:

删除elm:

周遊,safe模式的可以對本elm進行寫操作,注意((next_var) = ((var)->field.le_next), 1),讓&&後面的條件始終未1,防止next_var為NULL時,少循環一次:

其他操作:

示意圖:

qemu QLIST資料結構HEADENTRY

QSLIST是單向連結清單,QTAILQ的頭多了一個指向末尾的指針,不再贅述。