日期:2014-05-16  浏览次数:20578 次

求思路:linux C下多线程接收数据如何进行存储再统一处理
 本人菜鸟一枚,临危受命,硬着头皮接受任务。现遇到严重的瓶颈求牛人提供思路。
 问题如下:
 用串口4接收有效反馈数据并对数据进行提取处理(PS;用Linux下多线程接收数据的函数前人已经写好了不用我操心),接收有效反馈数据部分有一个专门的函数(函数1)处理,提取数据的部分字节并处理也有一个专门的函数(函数2)处理。现在的瓶颈是:串口4按反馈码字节的有效长度不停的来接收,接收完每串函数的全部字节后传给那个专门处理的函数2来进行相应的提取和操作。而我的反馈码需要根据不同的情况进行接收后再统一处理,反馈回来的数据非常多串,而且不能确定具体串数(要分视实际情况而定),即要在函数2里面把接收到的多次数据先进行提取有效字节后存储起来,等到接收完所有的的反馈码(因为都是在同一个函数里面处理所有很麻烦)后再统一把这些数据传给其他的变量,请问该如何处理?
------解决方案--------------------
你还是贴代码吧。 
也许你的问题是一个很简单的问题, 也许是你没有描述清楚。 

所谓的堆啊,栈啊,或是什么stl,这些东西都不是线程安全的。 
既然你用到了多线程,首先要考虑的就是线程安全。。。

建议你学一下apr和glib,这两个库里有很多并行编程中用得到的东西。


------解决方案--------------------
引用:
先谢谢各位的热心帮助!

引用:
C的话,使用内存动态分配,最后统一处理buffer


请问可以详细的讲一下要怎么一组一组的存(每来一串数据要存储其中的10个字符),存完后调用调用更新界面图标函数一起把所有的有用的值传给更新界面图标函数里面相应的变量时要怎么一组一组的取出来呢?还有能不能在存每一组数据的时候计数呢?PS:我现在在狂补内存动态分……


其实你自己把问题复杂化了。

你直接设置一个最大的

char buffer[1024]//单个线程里面。

如果你需要在不同线程里面操作这个buffer

可以这样   char *buffer

然后 buffer = (char *)malloc(1024)//这样1024的缓冲一半就够了。不够可以继续扩充

如果你想动态分配空间,反而效率降低,

动态分配
malloc remalloc就足够了。

所以。你之前秒速了那么多。你唯一的思想就是把零碎的数据整合到一起是吧?

可以啊,没问题的,就这样就足够了。没必做的太复杂,太复杂反而效率更低。

------解决方案--------------------
malloc动态分配在堆上。

一个进程中的所有线程都共享。

所以。malloc出来的buffer。只要是同一个进程中,这些线程都可以共享操作。

当然你的做一些保护工作。用互斥锁,或者读写锁对这个buffer进行保护。

同步。

差不多了。