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——

在这里插入图片描述

欢迎扫描上方二维码,获取更多编程技巧

你可能感兴趣的:(STM32笔记)