RT-Thread 學習筆記:二、通俗易懂學會線程時間片輪轉調度

時間片輪轉調度是多個相同優先級線程進行線程調度的主要方式。


所謂時間片輪轉,就是每個線程僅在屬於自己的時間片內處於運行態,時間片超出時,系統調度器依次運行接下來的任務,類似於音樂播放器的列表順序播放模式。


創建兩個動態任務,注意句柄和入口函數的使用!

/* 優先級、線程棧、時間片 */
#define THREAD_STACK_SIZE   1024
#define THREAD_PRIORITY     20
#define THREAD_TIMESLICE    10

/* 線程入口 */
static void thread_entry(void* parameter)
{
    rt_uint32_t value;
    rt_uint32_t count = 0;

    value = (rt_uint32_t)parameter;
    while (1)
    {
        if(0 == (count % 5))
        {
            rt_kprintf("thread %d is running ,thread %d count = %d\n", value , value , count);

            if(count> 200)
                return;
        }
         count++;
     }
}

int timeslice_sample(void)
{
	/* 注意!此處使用同一個句柄、入口函數,僅在入口函數的參數有所不同 */
    rt_thread_t tid = RT_NULL;
    /* 創建線程 1 */
    tid = rt_thread_create("thread1",
                            thread_entry, (void*)1,
                            THREAD_STACK_SIZE,
                            THREAD_PRIORITY, THREAD_TIMESLICE);
    if (tid != RT_NULL)
        rt_thread_startup(tid);


    /* 創建線程 2 */
    tid = rt_thread_create("thread2",
                            thread_entry, (void*)2,
                            THREAD_STACK_SIZE,
                            THREAD_PRIORITY, THREAD_TIMESLICE-5);
    if (tid != RT_NULL)
        rt_thread_startup(tid);
    return 0;
}

/* 導出到 msh 命令列表中 */
MSH_CMD_EXPORT(timeslice_sample, timeslice sample);

由此可見,生成不同的動態任務,主體部分區別僅在 rt_thread_create() 函數體內,與句柄無關。

——END——

在這裏插入圖片描述

歡迎掃描上方二維碼,獲取更多編程技巧
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章