完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
动态申请的邮箱信号量这些 到底要怎么释放才能安全 这种问题困扰我挺久的,确实也有别的原因比如设计容量的问题,导致这个mailbox只能用动态申请,没办法使用静态的(静态可能要同时存在很多很多个). 举个例子: 1.线程1动态申请了一个邮箱 放在全局变量里面 进行超时接收 2.线程2收到外部触发后检查到有这个全局邮箱的时候就转发 3.线程1超时的时候或者收到邮件后就删除这个邮箱 并把全局变量清掉. 临界问题就出在 线程1超时了 删除了邮箱 但是全局变量还没清空 ,这时候线程2收到外部触发就绪了开始跑 全局变量还在 拿来发的就出问题了 求解这种问题,或者是我的思路哪里有问题导致会遇到这种问题. rt_mailbox_t mb = NULL; void thread1(void *param) { mb = rt_mb_create("123", 1, RT_IPC_FLAG_FIFO); // ...做了一些操作,比如发送一些数据,导致这个邮箱可能有邮件会回来 uint8_t *pdata = NULL; rt_mb_recv(mb, (rt_ubase_t *)pdata, 5000); // 从rt_mb_recv里面超时调度回来开始就一直有临界问题 rt_mb_delete(mb); mb = NULL; if (pdata) { free(pdata); } } void thread2(void *param) { while (1) { //...接收一些信息 比如说外部中断获得一些数据 uint8_t *pdata = malloc(16); if (mb) { rt_err_t Err = rt_mb_send(mb, (rt_ubase_t)pdata); if (Err) { free(pdata); } } else { free(pdata); } } } |
|
相关推荐
2个回答
|
|
|
|
|
|
rt_mb_recv(mb, (rt_ubase_t *)&pdata, 5000);
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
943 浏览 0 评论
AI模型部署边缘设备的奇妙之旅:如何在边缘端部署OpenCV
3154 浏览 0 评论
tms320280021 adc采样波形,为什么adc采样频率上来波形就不好了?
1426 浏览 0 评论
2072 浏览 0 评论
1595 浏览 0 评论
75177 浏览 21 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-27 02:25 , Processed in 0.651815 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号