【RT-Thread读书笔记】(1)线程的初始化以及链表
[复制链接]
本帖最后由 dong2213dong 于 2019-4-25 21:23 编辑
上一篇笔记中介绍了线程、线程栈、线程控制块的概念,线程是处理具体事件的一段程序代码(函数)、线程栈用来保存线程运行结束时刻所有的运行状态以便线程再次被操作系统调用可以在上一次被停止的时间点上无缝的继续运行、线程控制块用来记录线程自身的各种信息(如书中比喻的那样,线程控制块相当于线程的身份证),显然线程、线程栈以及线程控制块是需要通过一种方式联系起来使用,通过什么方式呢?是通过线程初始化函数【rt_thread_init】将这三者建立连接关系的,rt_thread_init通过传入的形参将线程控制块中该有的信息实际建档,这样之后操作系统就可以通过线程控制块来进行线程的各种控制了。 书中第六章通过线程初始化函数引出了线程链表节点的概念,但只是说往后要把线程插入到各种链表中就是通过这个节点来实现的,我想了想,如果我对操作系统的知识一无所知纯粹的从零开始学的话,这样的直接引入会让我感到困惑(当然这个困惑学习完了所有的知识之后是必然会消除的),那就是为什么要把线程插入到各种链表中?插入到链表中的是为了实现什么?所以我这里根据自己之前掌握的一点儿操作系统知识理解记录一下,既然我们知道了线程可能被系统调用运行也可能被操作系统轮休,也就是说线程其实是分成不同的工作状态的(好比我们是上班啊,还是休息啊,还是请假啊。。。)线程也一样,有就绪态、运行态、阻塞态三种状态(常规来说应该是分成这三种状态,可能还有的细分成死亡态,不过并不多见),OK,那既然线程是分成不同的工作状态的,这些个状态记录到哪呢?我们是不是可以在控制块中添加表示工作状态的变量来表示呢?NO,NO,NO,很明显不是一个好想法,操作系统会哭的。。。,这时候就该是线程链表节点现身来控制场面了,操作系统会维持几个链表,当线程处于非运行态时就乖乖的到某个链表中去,就好像我们工作在单位,休息了要回家(可能不是特别贴切。。)这样的话,操作系统通过各个链表就可以清晰明了的掌握了所有线程的工作状态。既然用到了链表,那就需要链表节点了,线程控制块中的线程链表节点刚好就是用来做这个工作的。关于链表的具体操作方法(插入、删除)就不做记录了。
今天就写这么多吧,水平有限,很多文字只是为了方便自己理解,写的并不一定准确。
此内容由EEWORLD论坛网友dong2213dong原创,如需转载或用于商业用途需征得作者同意并注明出处
|