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