线程创建好之后,我们需要把线程添加到就绪列表里面,表示线程已经就绪,系统随时可以调度。就绪列表在 scheduler.c 中定义
实现就绪列表
- 定义就绪列表
- 将线程插入到就绪列表
定义就绪列表
//线程就绪列表
rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];
数组下标对应线程优先级
将线程插入到就绪列表
线程控制块里面有个tlist成员,数据类型为rt_list_t,我们将线程插入到就绪列表里面,就是通过将线程控制块的 tlist 这个节点插入到就绪列表中来实现的
//初始化线程
rt_thread_init( &rt_flag1_thread, /* 线程控制块 */
flag1_thread_entry, /* 线程入口地址 */
RT_NULL, /* 线程形参 */
&rt_flag1_thread_stack[0], /* 线程栈起始地址 */
sizeof(rt_flag1_thread_stack) ); /* 线程栈大小,单位为字节 */
//将线程插入到就绪列表
rt_list_insert_before( &(rt_thread_priority_table[0]) , &(rt_flag1_thread.tlist));
/* 初始化线程 */
rt_thread_init( &rt_flag2_thread, /* 线程控制块 */
flag2_thread_entry, /* 线程入口地址 */
RT_NULL, /* 线程形参 */
&rt_flag2_thread_stack[0], /* 线程栈起始地址 */
sizeof(rt_flag2_thread_stack) ); /* 线程栈大小,单位为字节 */
//将线程插入到就绪列表
rt_list_insert_before( &(rt_thread_priority_table[1]) , &(rt_flag2_thread.tlist));
我们选择将 flag1 线程插入到就绪列表下标为 0 的链表中, flag2 线程插入到就绪列表下标为 1 的链表中,