在调用rt_workqueue_dowork函数时,经常出错,查看文档是“该工作项正在执行”
如果工作队列有工作正在执行,就不允许再次追加工作吗?
我打算使用工作队列释放内存垃圾的,经常添加不了队列,导致内存泄漏严重。
查看更多
确实是这样的,内存足够情况下建议不要用系统默认工作队列,有些组件用到了系统默认工作队列自己创建一个单独的工作队列,并不要设置耗时操作。或者通过事件队列自己实现一个啦,好奇释放内存为什么要交给另外一个线程来,为了实时性? 这样是很有风险的。
欢迎发表与嵌入式相关的技术分享、开发技巧、工具介绍、技术设想、职业心得、行业评论等对他人有启发,排版优雅的文章
回到 顶部
发布 问题
分享 好友
手机 浏览
投诉 建议
回到 底部
对,模拟GC,统一回收垃圾。
因为以太网包的很多对象是需要嵌套释放的,需要一层层解析下去进行深度释放,个人感觉会比较耗时,于是想在以太网帧的解析、路由、响应的线程之外,在闲时进行深度垃圾清理。
我在编写工业实时以太网项目的协议栈,响应速度要求很高。
在使用工作队列的时候,发现当正在闲时清理的时候,这时候有个高级线程打断进来,这个高级线程处理数据后,再次追加清理数据的工作,就会添加不了。
哇塞太高级了,你们要是严格按照OSI七层模型来的话,我感觉层与层之间的数据拷贝就会超级耗时,lwip就没有做严格的分层,层与层之间数据共享。
这个模拟gc,你要怎么保证处理完一包后通知gc线程处理,然后迅速到第二包时使用的指针是已经被释放的呀。可能处理线程比gc线程优先级高,中途打断,甚至gc线程根本没有运行。
个人感觉这样模拟gc挺不现实的
我放弃工作队列用邮箱实现了。
哪有什么数据拷贝,都是用结构体指针去传导。
还有你说的什么gc不现实,为啥,开个低优先级线程,邮箱传过去就行。