完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近在看等待队列,发现void rt_wqueue_wakeup(rt_wqueue_t *queue, void *key)每执行一次只能唤醒等待队列中的一个线程?能不能一次性唤醒等待队列中的所有线程? 还有想请教一下waitqueue的用法 如果一个waitqueue队列被唤醒了,还能不能再在这个队列中在添加等待线程? static struct rt_wqueue _wait_queue = {0}; 比如上面的代码,线程1和线程2都被加入到了等待队列,唤醒线程 wqueue_test去执行rt_wqueue_wakeup函数唤醒这个队列_wait_queue。 rt_wqueue_wakeup()是不是把_wait_queue队列中每个等待线程都唤醒了还是只唤醒一个等待线程。 另外,当_wait_queue被执行了唤醒,这个_wait_queue队列还能继续添加线程进去被等待吗, 也就是执行了rt_wqueue_wakeup(&_wait_queue, 0)这个函数后能不能接着有其他线程继续执行 rt_wqueue_wait(&_wait_queue, 0, RT_WAITING_FOREVER)把自己挂到这个等待队列中去,等待下一次被rt_wqueue_wakeup唤醒? |
|
相关推荐
5个回答
|
|
rt_wqueue_wait ,只会把当前的线程rt_thread_self(),加入等待队列,如线程1,所以 wakeup时,就只会 wakeup 这个线程1。
|
|
|
|
如果有两个线程,分别线程1和线程2都执行rt_wqueue_wait,相当于这两个线程都进入了等待队列中。这时线程3来执行rt_wqueue_wakeup,唤醒队列,这个唤醒操作能把线程1和线程2都唤醒吗?还是只能唤醒一个,先进入等待队列那个。如果线程1和线程2都要给唤醒,是不是线程3要执行两次rt_wqueue_wakeup操作,来唤醒队列中的等待的两个线程。
|
|
|
|
|
|
|
|
啊? 我对等待队列有误解了,
定义一个队列struct rt_wqueue _wait_queue ={0}; 初始化这个队列rt_wqueue_init(&_wait_queue); 然后这个_wait_queue应该可以被多个线程执行等待吧? 多个线程都被睡眠挂到这个队列里的链表上(通过执行rt_wqueue_wait(&_wait_queue, 0, RT_WAITING_FOREVER))。 直到有另外的线程执行rt_wqueue_wakeup(&_wait_queue, 0),把所有挂到该队列_wait_queue上的线程同时唤醒。 我的这样理解是不是不正确? |
|
|
|
rt_wqueue_init(&_wait_queue1);
rt_wqueue_init(&_wait_queue2); 作用是挂起当前线程 要这样用,这部分可以对照实现的代码来看,就像是定时器,每个定时器,都要有定时器对象,只是都挂载到内核的定时器链表上。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AI模型部署边缘设备的奇妙之旅:边缘端设备的局域网视频流传输方案
1379 浏览 0 评论
1437 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
6496 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1837 浏览 0 评论
3028 浏览 0 评论
77269 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-14 06:08 , Processed in 0.448584 second(s), Total 44, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号