1. 程式人生 > >RT-Thread 讀後感3 —— 實現就緒列表 (定義就緒列表,將執行緒插入到就緒列表)

RT-Thread 讀後感3 —— 實現就緒列表 (定義就緒列表,將執行緒插入到就緒列表)

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的連結串列中。