多个线程共用一个SOCKET的问题

xtaddqqug 2003-06-29 05:46:33
当多个线程共享一个SOCKET时用不用使用同步机制加以保护
...全文
555 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ilovevc 2003-07-01
  • 打赏
  • 举报
回复
上面是对tcp来说, udp就无所谓了, udp要么发送出去, 要么什么都没有发送.

而且, 一个socket的发送处理, 被多线程使用, 这个程序处理方法不太好.
最好是有一个专门的发送线程来处理发送的数据, 数据被其它的线程放入
一个共享buffer中.当然, 这个buffer在读写的时候必须锁定
ilovevc 2003-07-01
  • 打赏
  • 举报
回复
socket内部会处理同步的问题, 但是, 如果你自己不加上同步的话,
可能数据的到达顺序有问题.
例如thread1: send(s, data1, len1, 0);
thread2: send(s, data2, len2, 0);

由于send函数并不保证发送所有的数据, 它的返回值是已经成功发生的数据
长度, 因此, 一般调用发送函数的时候, 都有一个循环. 如果你没有同步,
那么, 有可能对方先收到data1前一部分, 然后是data2的部分,
然后是data1的后面那部分.等等



xtaddqqug 2003-07-01
  • 打赏
  • 举报
回复
我的意思是当多个线程共用一个连接好的WINSOCKET发送数据时,要不要自己去做同步,WINSOCKET自己或操作系统能否自己处理同步问题。
florist2000 2003-07-01
  • 打赏
  • 举报
回复
不用同步,如果没有共享的东西而只是公用文件描述符的话。
defector 2003-07-01
  • 打赏
  • 举报
回复
这个BUFFER怎么处理?
那位大虾再来讲讲互斥区!
ISAKEEPER 2003-06-30
  • 打赏
  • 举报
回复
如果你共享的是一个全局变量,可以不要同步化

不然的话,就要了如,临界区、事件等方法了
Healer 2003-06-29
  • 打赏
  • 举报
回复
要, 可以用最简单的临界量了, 但是是不是有必要啊??
不知道这样做是什么目的??
NewFree 2003-06-29
  • 打赏
  • 举报
回复
当然要
johndotcom 2003-06-29
  • 打赏
  • 举报
回复

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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