contributed by < JUSTUSVMOS
>
$ gcc --version
gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Address sizes: 39 bits physical, 48 bits virtual
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Vendor ID: GenuineIntel
Model name: Intel(R) Core(TM) i7-9700K CPU @ 3.60GHz
CPU family: 6
Model: 158
Thread(s) per core: 1
Core(s) per socket: 8
Socket(s): 1
Stepping: 13
BogoMIPS: 7200.01
在 Linux kernel 中,鏈結串列的基本元件是 struct list_head
。其定義通常如下:
struct list_head {
struct list_head *prev;
struct list_head *next;
};
為了靈活運用鏈結串列,Linux kernel 採用「嵌入式」設計,只需在自訂型別中加入一個 struct list_head
成員,即可將該型別放入鏈結串列。:
element_t
:
通過嵌入 struct list_head 成員,使得每個 element_t 可以成為一個節點,串聯成一個循環雙向鏈結串列,便於管理隊列中的各個元素。
typedef struct {
int data;
struct list_head list;
} element_t;
queue_contex_t
:
包含一個指向實際鏈結串列(由 element_t 節點組成)的 q 指標,以及一個 chain 成員用於將多個隊列上下文連成一個雙向鏈結串列,另外還有記錄隊列大小及唯一標識的成員。
typedef struct {
struct list_head *q;
struct list_head chain;
int size;
int id;
} queue_contex_t;