准确的说是除掉头文件,测试代码和非关键的纯算法代码(只有双向环形链表的ADT),核心代码只有130行左右,已经是蝇量级的用户态线程库了。把这个库取名为ezthread,意思是,这太easy了,人人都可以读懂并且实现这个用户态线程库。我把该项目放在github上,欢迎来拍砖: https://github.com/Yuandong-Chen/Easiest-Thread。那么下面谈谈怎么实现这个ezthread。
大家都会双向环形链表(就是头尾相连的双向链表),我们构造这个ADT结构:
首先是每个节点:
1 typedef struct __pnode pNode;2 struct __pnode3 {4 pNode *next;5 pNode *prev;6 Thread_t *data;7 };
显然,next指向下一个节点,prev指向上一个节点,data指向该节点数据,那么这个Thread_t是什么类型的数据结构呢?
typedef struct __ez_thread Thread_t;struct __ez_thread { Regs regs; int tid; unsigned int stacktop; unsigned int stacksize; void *stack; void *retval; };