线程之间传递数据

nicholas 2000-08-31 10:13:00
在做一个网关时,有一个主线程接受请求,128个辅助线程,要求主线程把数据包处理后选择一个闲置辅助线程发送给服务端然后等待返回结果,请问怎么在线程之间传递数据比较好,我用的是MFC,为CThread的继承类申明了一个函数Passdata和一个成员变量m_MsgBuf,然后在主线程中调用passdata把数据包拷入m_MsgBuf中,请哪位大虾评价一下这种做法。谢谢!
...全文
203 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Holly 2000-08-31
  • 打赏
  • 举报
回复
你有128个辅助线程,如果都采用复制数据的方法,即使数据量不大,最终的开销也是很大的,影响整体的效率!
控制的过程你需要许多同步的控制:
线程轮询访问数据缓冲池,设置访问标记,设置处理完毕标记,设置数据未正在填充标记!
Holly 2000-08-31
  • 打赏
  • 举报
回复
你应当尽量避免采用复制数据的方法!直接采用全局的数据缓冲池!
pbi 2000-08-31
  • 打赏
  • 举报
回复
只要你解决了线程之间的同步问题,这样做是可以的。例如在辅助线程处理m_MsgBuf期间,别的线程不应该调用该对象的Passdata成员函数。如果你的数据拷贝量很大,也可以将数据块的指针传给辅助线程,避免拷贝的开销。其实这类程序的主要问题在于线程之间的同步,如主线程如何选择闲置的辅助线程,使用什么方法通知辅助线程,辅助线程处理完后怎样通知主线程等。
Areslee 2000-08-31
  • 打赏
  • 举报
回复
这样应该是可以了,在同一进程间传递数据随便用什么方法都可以。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧