OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7780|回复: 2

求助,关于RTOS的线程,线程1和线程2的启动流程

[复制链接]

5

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2019-6-20
在线时间
37 小时
发表于 2021-3-17 21:17:01 | 显示全部楼层 |阅读模式
5金钱
请教一下在操作系统中,为什么线程1创建,启动后,为什么不会立即执行,而是等到线程2启动后,线程1和线程2才开始执行,期间的代码是怎么走的?

int timeslice_sample(void)
{
    rt_thread_t tid;
    /* 创建线程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;
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
434
金钱
434
注册时间
2013-3-18
在线时间
82 小时
发表于 2021-3-31 08:59:45 | 显示全部楼层
主要是优先级的问题,调用timeslice_sample这个函数的任务的优先级如果高于thread1,那么thread1是不会立即执行,而是就绪,继续创建thread2,如果也高于thread2,那么thread2就绪,继续执行,直至挂起后,thread1thread2中优先级高者先执行。时间片也是一样,就绪进程按先入先出原则排列,时间片到了,才调度
回复

使用道具 举报

1

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
388
金钱
388
注册时间
2020-11-7
在线时间
44 小时
发表于 2021-4-19 14:10:45 | 显示全部楼层
2楼说的有道理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-10 12:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表