RT-Thread 讀後感3 —— 實現就緒列表 (定義就緒列表,將執行緒插入到就緒列表)
阿新 • • 發佈:2018-11-11
1. 定義就緒列表
執行緒建立好後,需要將執行緒新增到就緒列表裡面,表示執行緒已經就緒,系統隨時可以排程。RT-Thread定義的就緒列表如下:
/* 執行緒就緒列表如下
** RT_THREAD_PRIORITY_MAX 在rtconfig.h中預設定義為32 決定最大執行緒優先順序
*/
rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX];
2. 將執行緒插入到就緒列表
將執行緒插入到就緒列表就是通過執行緒控制塊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的連結串列中。