1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
int rt_wqueue_wait(rt_wqueue_t *queue, int condition, int msec) 源码实现后进先出那还叫queue队列嘛?? |
|
相关推荐
4个回答
|
|
看懂 rt_list 的数据结构和逻辑,就不难理解这个问题了。 (tip: 注意关注 rt_list_insert_before 与 rt_list_insert_after 的区别) 测试代码及结果: #include "ipc/waitqueue.h" static struct rt_wqueue _wait_queue = {0}; void _entry_1(void *p) { rt_kprintf("wait 1n"); rt_err_t err = rt_wqueue_wait(&_wait_queue, 0, RT_WAITING_FOREVER); rt_kprintf("wait 1 end: %d n", err); } void _entry_2(void *p) { rt_thread_mdelay(50); rt_kprintf("wait 2n"); rt_err_t err = rt_wqueue_wait(&_wait_queue, 0, RT_WAITING_FOREVER); rt_kprintf("wait 2 end: %d n", err); } void _entry_end(void *p) { rt_thread_mdelay(100); rt_kprintf("wackup n"); rt_wqueue_wakeup(&_wait_queue, 0); rt_thread_mdelay(50); rt_kprintf("wackup 2n"); rt_wqueue_wakeup(&_wait_queue, 0); } void wqueue_test(void) { rt_wqueue_init(&_wait_queue); rt_thread_t th = rt_thread_create("t1", _entry_1, RT_NULL, 1024, 10, 10); RT_ASSERT(th); rt_thread_startup(th); th = rt_thread_create("t2", _entry_2, RT_NULL, 1024, 10, 10); RT_ASSERT(th); rt_thread_startup(th); th = rt_thread_create("t3", _entry_end, RT_NULL, 1024, 10, 10); RT_ASSERT(th); rt_thread_startup(th); } MSH_CMD_EXPORT(wqueue_test, wqueue_test); |
|
|
|
感谢,认真研读了list源码才知道rt_list_insert_before意思是在l节点的前面插入n而不是链表前插入节点(之前一直误认为此API是在链表头部插入一个节点)
|
|
|
|
rt_wqueue_wakeup每次只能唤醒队列中的一个线程?还是唤醒等待队列中的所有线程?
|
|
|
|
写段测试函数,试试不就知道了 :) 如果我记得不错的话,应该是只唤醒一个。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
529 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
2000 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1174 浏览 0 评论
1674 浏览 0 评论
1439 浏览 0 评论
74744 浏览 21 评论
小黑屋| 手机版| Archiver| 德赢Vwin官网 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-21 21:41 , Processed in 0.538660 second(s), Total 77, Slave 59 queries .
Powered by 德赢Vwin官网 网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
德赢Vwin官网 观察
版权所有 © 湖南华秋数字科技有限公司
德赢Vwin官网 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号