Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Kernel
线程主动让出再思考
发布于 2018-05-17 10:44:00 浏览:2107
订阅该版
今天在学习普通二值信号量会使得优先级翻转的过程中,感受到rt_thread_delay()与rt_thread_yield()的区别,也不知自己是否理解准确了?请大神指点。 程序中每个线程的优先级都不一样,某一个线程想要让出给别的线程执行机会,我开始在这个线程中用rt_thread_yield(),发现程序会永远在这个线程中运行不让出处理器;之后替换成rt_thread_delay(1),在串口终端可以看到这个线程确实让出机会给别的优先级任务执行机会了。 查阅了源码了解到rt_thread_yield()会将本线程移出就绪列表,随后立即又插入到本优先级对应的列表尾部!如果本优先级只有一个任务,那么即使执行rt_schedule,也是继续执行本线程而不会让出处理器,翻阅编程指南也有这样的描述“如果当前优先级只有这一个线程,则这个线程继续执行,不进行上下文切换动作”。指南中应该改成是执行切换动作了只不过切换回自己了?? 使用rt_thread_delay(1)会首先**挂起**本线程,开启线程定时器计时;在systick中断中判断这个定时器是否定时已经到了,如果到了就执行线程定时器回调函数( t->timeout_func(t->parameter);)去**解挂**和插入就绪列表参与调度。 因此如果没有同优先级的线程,那么使用系统延时是正确的让出线程方法!?不知道还有别的方法吗?
查看更多
4
个回答
默认排序
按发布时间排序
noerr
2018-05-17
这家伙很懒,什么也没写!
..........很少用延时吧 一般都是事件 信号量 邮箱 消息队列 互斥锁 等这些吧 或者 某些阻塞函数也可以
wen619
2018-05-17
这家伙很懒,什么也没写!
我这个是学习,所以通过delay来让出线程。等信号量如果等不到 也确实会让出线程,我刚才试了。
tanek
2018-05-17
这家伙很懒,什么也没写!
rt_thread_yield本身就是偏向底层的API,不推荐用户使用的。 rt_thread_delay用来让出cpu也不是最优解。 每个线程应该专注自己的事情,当需要其他资源的时候就被阻塞,等待别人唤醒。这是更合适的方式。不依赖具体的延时。适应性和实时性也更好。
wen619
2018-05-17
这家伙很懒,什么也没写!
“每个线程应该专注自己的事情,当需要其他资源的时候就被阻塞,等待别人唤醒。这是更合适的方式。不依赖具体的延时。适应性和实时性也更好。” 谢谢。等有实际项目了,我好好体会这句话。非常感谢。
撰写答案
登录
注册新账号
关注者
0
被浏览
2.1k
关于作者
wen619
这家伙很懒,什么也没写!
提问
10
回答
27
被采纳
0
关注TA
发私信
相关问题
1
cpu使用率分析
2
选择FreeRTOS, 还是RT-Thread。
3
thread heap stack overflow ?
4
rtt消息队列delay问题
5
释放被删除线程的内存地方在哪里啊
6
请教:各线程结束后,释放其中的内存的连续性问题
7
STM32F103中断关于信号量、邮箱问题
8
RTT中的线程栈大小如何控制
9
关于线程由执行态变为挂起态的代码实现,,,
10
rt_malloc(rt_size_t size)内存分配函数最小分配尺寸问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
cJSON 避坑笔记
2
Vision-Board porting Xbox One USB Controller
3
可存万物的bsp_flash
4
TIM,硬件定时器驱动程序
5
LCD(mipi)+LVGL +gui(适配V8.x版本)
热门标签
RT-Thread Studio
串口
LWIP
Env
SPI
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
编译报错
socket
flashDB
keil_MDK
GD32
Debug
MicroPython
msh
ulog
SFUD
SDIO总线
rt_mq_消息队列_msg_queue
本月问答贡献
出出啊
1506
个答案
339
次被采纳
小小李sunny
1423
个答案
281
次被采纳
张世争
740
个答案
161
次被采纳
crystal266
539
个答案
157
次被采纳
whj467467222
1218
个答案
146
次被采纳
本月文章贡献
出出啊
1
篇文章
5
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
3
篇文章
1
次点赞
crystal266
2
篇文章
1
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部