线程让出实验【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

……..

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

相关文章推荐

linux多线程学习(四)——互斥锁线程控制

在前面的文章中提及到,一个进程中的多个线程是共享同一段资源的,由于线程对资源的竞争引出了锁。其中mutex是一种简单的加锁方法,这个互斥锁只有两种状态,那就是上锁和解锁,可以把互斥锁看作是某种意义上的...
  • wtz1985
  • wtz1985
  • 2009年01月17日 21:24
  • 16577

RT-Thread多线程导致的临界区问题

临界资源是指一次仅允许一个线程使用的共享资源。不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它们进行访问。每个线程中访问临界资源的那段代码称为临 界区( Critical Section...

线程优先级抢占实验【RT-Thread学习笔记 3】

同时处于就绪状态的线程,优先级高的先执行。 高优先级就绪时,低优先级任务让出CPU,让高优先级任务先执行。 创建两个任务函数: //线程优先级抢占 void thread1_en...

【RT-Thread学习笔记 3】线程优先级抢占实验

同时处于就绪状态的线程,优先级高的先执行。 高优先级就绪时,低优先级任务让出CPU,让高优先级任务先执行。 创建两个任务函数: //线程优先级抢占 void thread1_en...

优先级反转实验,使用信号量实现【RT-Thread学习笔记 5】

RTOS中很经典的问题。就是在使用共享资源的时候,优先级低的进程在优先级高的进程之前执行的问题。这里模拟这种情况。 下面的实验模拟了优先级反转的情况: 先定义三个线程: //优先...

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

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

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

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

RT_thread 学习笔记2——TCP/IP协议栈(LwIP)

netconn write() 原型声明  int  netconn write(struct  netconn *conn,  void *data, int  len,  unsigned in...
  • lcydhr
  • lcydhr
  • 2015年04月16日 10:07
  • 420

RT_thread 学习笔记2——TCP/IP协议栈(LwIP)

netconn write() 原型声明  int  netconn write(struct  netconn *conn,  void *data, int  len,  unsigned in...

STM32 + RT Thread OS 学习笔记[六]

1、  触摸屏校准程序 由于GUI目前在持续变更中,有些函数在新版本中已经不同了,而bsp中的校准程序没有跟进修改,所以无法编译通过。   修正可编译版本: #include ...
  • mostone
  • mostone
  • 2013年07月14日 21:44
  • 3117
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:线程让出实验【RT-Thread学习笔记 4】
举报原因:
原因补充:

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