准确的说是除掉头文件,测试代码和非关键的纯算法代码(只有双向环形链表的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;
};

网友评论