线程让出实验【RT-Thread学习笔记 4】

转载 2016年01月23日 22:05:17

API: rt_thread_yield

线程函数中调用,本线程释放MCU。如果此时有别的相同优先级的任务整处于等待状态,将获得MCU使用权。

线程让出就是给OS增加一个任务调度的机会。

创建两个线程,观察他们的结果:

复制代码
//线程让出试验
void yield_test1(void* parameter)
{
    rt_uint32_t count = 0;
    while(1)
    {
        rt_kprintf("thread test1 count:%d\n",count++);
        rt_thread_yield();
    }
}
void yield_test2(void* parameter)
{
    rt_uint32_t count = 0;
    while(1)
    {
        rt_kprintf("thread test2 count:%d\n",count++);
        rt_thread_yield();
    }
}
复制代码

启动他们:

复制代码
//线程让出实验,两个线程优先级一样。否则在给一次调度机会也是高优先级的任务使用MCU
    tid2 = rt_thread_create("yield1",yield_test1,RT_NULL,2048,10,5);
    if(tid2 != RT_NULL)
        rt_thread_startup(tid2);
    tid2 = rt_thread_create("yield2",yield_test2,RT_NULL,2048,10,5);
    if(tid2 != RT_NULL)
        rt_thread_startup(tid2);
复制代码
 

看见两个线程轮流输出:

\ | /

- RT - Thread Operating System

/ | \ 2.0.0 build Aug 29 2014

2006 - 2013 Copyright by rt-thread team

thread test1 count:0

thread test2 count:0

thread test1 count:1

thread test2 count:1

thread test1 count:2

thread test2 count:2

thread test1 count:3

thread test2 count:3

thread test1 count:4

thread test2 count:4

thread test1 count:5

thread test2 count:5

……..

如果没有线程让出的操作,情况将是等一个线程时间片结束之后,才会轮到另一个线程输出。不会是轮流输出了

RT-Thread内核之线程调度(三)

RT-Thread线程 线程调度
  • lpjybn
  • lpjybn
  • 2015年07月13日 14:49
  • 871

【RT-Thread学习笔记 4】线程让出实验

API: rt_thread_yield 线程函数中调用,本线程释放MCU。如果此时有别的相同优先级的任务整处于等待状态,将获得MCU使用权。 线程让出就是给OS增加一个任务调度的机会。 ...
  • jxgxlm2008
  • jxgxlm2008
  • 2016年07月04日 15:02
  • 274

RT-Thread创建静态、动态线程

RT-Thread 实时操作系统核心是一个高效的硬实时核心,它具备非常优异的实时性、稳 定性、可剪裁性,当进行最小配置时,内核体积可以到 3k ROM 占用、 1k RAM 占用。  ...
  • jxgxlm2008
  • jxgxlm2008
  • 2016年07月13日 21:15
  • 1580

RT-thread任务调度算法

在任务调度器的实现上,μC/OS-II和RT-Thread都采用了位图调度(bitmap scheduling),任务优先级的值越小则代表具有越高的优先级,主要区别在于实现形式,是采用多级队列的形式,...
  • u011392772
  • u011392772
  • 2015年07月29日 09:23
  • 1101

RT-Thread的线程(任务)处理【RT-Thread学习笔记 2】

RT-Thread中使用线程这个概念,而不是任务。两者相似,我在这里把他的线程当作任务来理解了 1、任务处理: 动态任务相关API 创建任务:rt_thread_create函数,创...
  • wangpengqi
  • wangpengqi
  • 2016年01月23日 21:18
  • 1366

RT-Thread操作系统之一线程总结

1--线程的创建与删除   线程的基本知识   组成 --------线程代码(函数),线程控制块、线程堆栈。   ·线程代码 /* static void thread1_entr...
  • liaoxu02
  • liaoxu02
  • 2014年05月26日 21:12
  • 1779

Netty 4.x学习笔记 - 线程模型

1、前言 前面两篇学习笔记已经说完了ByteBuf和Channel和Pipeline,这篇开始讲讲前面欠的债——线程模型(EventLoop和EventExecutor)。 2、Net...
  • libing13810124573
  • libing13810124573
  • 2016年03月21日 21:37
  • 1299

openfire线程暴增导致堆溢出服务器宕机排查处理

openfire线程暴增导致堆溢出问题排查处理
  • gufachongyang02
  • gufachongyang02
  • 2017年04月02日 17:34
  • 456

多线程使用linux时间函数的方法

 linux的时间函数有其特别需要注意的使用方法,在工程项目中,这点很容易忽视,本文就时间函数在多线程中的使用作一个小结。 首先看一个函数,取下一天的功能函数,该函数使用了时间函数localt...
  • Jody1989
  • Jody1989
  • 2017年06月14日 11:33
  • 226

RT-Thread内核之线程调度(二)

RT-Thread线程调度分析
  • lpjybn
  • lpjybn
  • 2015年07月13日 11:32
  • 1089
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程让出实验【RT-Thread学习笔记 4】
举报原因:
原因补充:

(最多只允许输入30个字)