Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
pipe
select
之前select死循环的问题查清楚了
发布于 2021-06-02 12:07:28 浏览:1406
订阅该版
问题可以见我之前发的贴子的描述,希望官方在下次发布时可以更改如下: 1.在poll_do里面增加pt->triggered = 0;这样可以避免在不是期待唤醒的时候可以挂起线程; 2.将pipe的机制可以改为read的时候不要唤醒写。原因如下: 应用程序使用pipe的框架如下:  线程1、2、3分别是3个独立的线程,优先级分别是25、26、27(25的优先级最大),其中有4到5对fd,此处只画了引起问题的这两对,通过分析内核pipe及poll处理代码,当pipe2里面为空时,假设此时线程26执行,在调用select(FD2[0])时,发现pipe2为空,挂起线程26,此时25线程ready,执行25线程,假设此时pipe1不为空,select(FD[0])成功返回,调用read(FD[0]),read的时候会唤醒FD[1]所在的线程,此时切换到线程26运行,但是此时poll_table里面的属性triggered被置位,造成了一种假象:线程26认为是FD2[1]唤醒的自己,接着poll,发现pipe2还是空,导致一直死循环。 ```c static int poll_do(struct pollfd *fds, nfds_t nfds, struct rt_poll_table *pt, int msec) { int num; int istimeout = 0; int n; struct pollfd *pf; int ret = 0; if (msec == 0) { pt->req._proc = RT_NULL; istimeout = 1; } while (1) { pf = fds; num = 0; pt->triggered = 0; for (n = 0; n < nfds; n ++) { ret = do_pollfd(pf, &pt->req); if(ret < 0) { /*dealwith the device return error -1 */ pt->req._proc = RT_NULL; return ret; } else if(ret > 0) { num ++; pt->req._proc = RT_NULL; } pf ++; } pt->req._proc = RT_NULL; if (num || istimeout) break; if (poll_wait_timeout(pt, msec)) istimeout = 1; } return num; } ```
查看更多
4
个回答
默认排序
按发布时间排序
mysterywolf
认证专家
2022-04-05
https://github.com/mysterywolf
https://github.com/RT-Thread/rt-thread/pull/5740
aozima
2021-06-02
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
赞! 感谢分享! 您也可以尝试学习发一个PR,直接修复。
小小李sunny
2021-06-02
这家伙很懒,什么也没写!
能深入去研究问题,给你点个赞!
flyboy
2021-10-13
Do my self();
有没有可以复现的代码,要不然这个问题不好提pr,不知道修没修好。
撰写答案
登录
注册新账号
关注者
0
被浏览
1.4k
关于作者
NR1101
这家伙很懒,什么也没写!
提问
10
回答
6
被采纳
0
关注TA
发私信
相关问题
1
使用fifo通道读取数据select不返回
2
select不返回问题,昨天未描述清楚
3
pahomqtt 编译时提示 缺少pipe是什么情况?
4
pipe 发送超过16384长度,会被截断
5
paho-mqtt pipe和socket 同时发送会导致pipe数据丢失
6
接收数据不触发select
7
支持多个fd同时select,目前的rtt貌似不支持
8
非阻塞 socket
9
请问Kconfig中select 如何选择非bool值的config的值呢
10
tcpclient_select_sample 等待网络函数参数问题
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
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
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
2
RT-Thread中的time溢出问题,时间戳溢出,解决方法
3
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
4
SystemView线程名字不显示
5
只用网页也能跑RT-Smart 无门槛腾讯Cloud studio + smart-build快速构建
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
winfeng
2
个答案
1
次被采纳
YZRD
2
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
阳光的掌控者
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部