準(zhǔn)確的說(shuō)是除掉頭文件,測(cè)試代碼和非關(guān)鍵的純算法代碼(只有雙向環(huán)形鏈表的ADT),核心代碼只有130行左右,已經(jīng)是蠅量級(jí)的用戶態(tài)線程庫(kù)了。把這個(gè)庫(kù)取名為ezthread,意思是,這太easy了,人人都可以讀懂并且實(shí)現(xiàn)這個(gè)用戶態(tài)線程庫(kù)。我把該項(xiàng)目放在github上,歡迎來(lái)拍磚: https://github.com/Yuandong-Chen/Easiest-Thread。那么下面談?wù)勗趺磳?shí)現(xiàn)這個(gè)ezthread。
大家都會(huì)雙向環(huán)形鏈表(就是頭尾相連的雙向鏈表),我們構(gòu)造這個(gè)ADT結(jié)構(gòu):
首先是每個(gè)節(jié)點(diǎn):
1 typedef struct __pnode pNode;2 struct __pnode3 {4 pNode *next;5 pNode *prev;6 Thread_t *data;7 };
顯然,next指向下一個(gè)節(jié)點(diǎn),prev指向上一個(gè)節(jié)點(diǎn),data指向該節(jié)點(diǎn)數(shù)據(jù),那么這個(gè)Thread_t是什么類型的數(shù)據(jù)結(jié)構(gòu)呢?
typedef struct __ez_thread Thread_t;struct __ez_thread { Regs regs; int tid; unsigned int stacktop; unsigned int stacksize; void *stack; void *retval; };