求思路:linux C下多线程接收数据如何进行存储再统一处理
本人菜鸟一枚,临危受命,硬着头皮接受任务。现遇到严重的瓶颈求牛人提供思路。
问题如下:
用串口4接收有效反馈数据并对数据进行提取处理(PS;用Linux下多线程接收数据的函数前人已经写好了不用我操心),接收有效反馈数据部分有一个专门的函数(函数1)处理,提取数据的部分字节并处理也有一个专门的函数(函数2)处理。现在的瓶颈是:串口4按反馈码字节的有效长度不停的来接收,接收完每串函数的全部字节后传给那个专门处理的函数2来进行相应的提取和操作。而我的反馈码需要根据不同的情况进行接收后再统一处理,反馈回来的数据非常多串,而且不能确定具体串数(要分视实际情况而定),即要在函数2里面把接收到的多次数据先进行提取有效字节后存储起来,等到接收完所有的的反馈码(因为都是在同一个函数里面处理所有很麻烦)后再统一把这些数据传给其他的变量,请问该如何处理?
------解决方案--------------------你还是贴代码吧。
也许你的问题是一个很简单的问题, 也许是你没有描述清楚。
所谓的堆啊,栈啊,或是什么stl,这些东西都不是线程安全的。
既然你用到了多线程,首先要考虑的就是线程安全。。。
建议你学一下apr和glib,这两个库里有很多并行编程中用得到的东西。
------解决方案--------------------
其实你自己把问题复杂化了。
你直接设置一个最大的
char buffer[1024]//单个线程里面。
如果你需要在不同线程里面操作这个buffer
可以这样 char *buffer
然后 buffer = (char *)malloc(1024)//这样1024的缓冲一半就够了。不够可以继续扩充
如果你想动态分配空间,反而效率降低,
动态分配
malloc remalloc就足够了。
所以。你之前秒速了那么多。你唯一的思想就是把零碎的数据整合到一起是吧?
可以啊,没问题的,就这样就足够了。没必做的太复杂,太复杂反而效率更低。
------解决方案--------------------malloc动态分配在堆上。
一个进程中的所有线程都共享。
所以。malloc出来的buffer。只要是同一个进程中,这些线程都可以共享操作。
当然你的做一些保护工作。用互斥锁,或者读写锁对这个buffer进行保护。
同步。
差不多了。