完善资料让更多小伙伴认识你,还能领取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每次只能唤醒队列中的一个线程?还是唤醒等待队列中的所有线程?
|
|
|
|
|
|
写段测试函数,试试不就知道了 :) 如果我记得不错的话,应该是只唤醒一个。
|
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1033 浏览 0 评论
2877 浏览 0 评论
图腾柱PFC无法上升至400V,且电感电流为正弦波形,但是幅值极小
9386 浏览 0 评论
飞凌嵌入式ElfBoard-Vim编辑器之静态链接和动态链接
2898 浏览 0 评论
使用 LinkBoy 将程序导出为 C 语言代码并烧录至 Arduino ESP32 开发板
2302 浏览 1 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 07:11 , Processed in 0.663319 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
554