线程之间传递数据
在做一个网关时,有一个主线程接受请求,128个辅助线程,要求主线程把数据包处理后选择一个闲置辅助线程发送给服务端然后等待返回结果,请问怎么在线程之间传递数据比较好,我用的是MFC,为CThread的继承类申明了一个函数Passdata和一个成员变量m_MsgBuf,然后在主线程中调用passdata把数据包拷入m_MsgBuf中,请哪位大虾评价一下这种做法。谢谢! 问题点数:50、回复次数:4Top
1 楼Areslee(懒虫易水)回复于 2000-08-31 10:33:00 得分 20
这样应该是可以了,在同一进程间传递数据随便用什么方法都可以。Top
2 楼pbi()回复于 2000-08-31 10:40:00 得分 30
只要你解决了线程之间的同步问题,这样做是可以的。例如在辅助线程处理m_MsgBuf期间,别的线程不应该调用该对象的Passdata成员函数。如果你的数据拷贝量很大,也可以将数据块的指针传给辅助线程,避免拷贝的开销。其实这类程序的主要问题在于线程之间的同步,如主线程如何选择闲置的辅助线程,使用什么方法通知辅助线程,辅助线程处理完后怎样通知主线程等。Top
3 楼Holly()回复于 2000-08-31 10:53:00 得分 0
你应当尽量避免采用复制数据的方法!直接采用全局的数据缓冲池!Top
4 楼Holly()回复于 2000-08-31 11:16:00 得分 0
你有128个辅助线程,如果都采用复制数据的方法,即使数据量不大,最终的开销也是很大的,影响整体的效率!
控制的过程你需要许多同步的控制:
线程轮询访问数据缓冲池,设置访问标记,设置处理完毕标记,设置数据未正在填充标记!Top




