社区
网络编程
帖子详情
同一个socket在多个线程中使用容易出现问题吗?
csgo
2005-10-08 05:49:36
如题。
...全文
438
9
打赏
收藏
同一个socket在多个线程中使用容易出现问题吗?
如题。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zxyjyzxyjy
2005-10-09
打赏
举报
回复
我认为,单CPU计算机上一个socket用一个线程发送,一个线程接收足够了,如果是多CPU则作好线程同步就行了。
goodboyws
2005-10-09
打赏
举报
回复
CAsyncSocket是线程安全的
DentistryDoctor
2005-10-09
打赏
举报
回复
在线程间传递CSocket*将会带来问题。
http://support.microsoft.com/default.aspx?scid=kb;en-us;175668
xxrl
2005-10-09
打赏
举报
回复
楼上说的对 CSocket具有线程依赖性,而且的确如果用的不好 在多线程中CSocket的确有很多问题,一般如果出现这种情况 都改成了api来编程
showgoodday
2005-10-08
打赏
举报
回复
Winsocks本身是支持多线程的,具有一定的线程独立性和安全性,但CSocket类以及CAsyn
cSocket类都有一些线程安全性问题。比如在线程之间传递CSocket对象就会发生异常,MS
DN中的建议是,传递前Detach,传递socket句柄,在目标线程中再Attach到一个CSocket对
象上。这似乎说明CSocket(或CAsyncSocket)具有线程依赖性。
lifengice0706
2005-10-08
打赏
举报
回复
注意同步对它的操作,再说如果你在两个线程中都send了,那接收的那一端必须根据一个固定的包结构(你自己定的)进行解包和拼包。
MuseIn
2005-10-08
打赏
举报
回复
那是一定的。
goodboyws
2005-10-08
打赏
举报
回复
要看你怎么用了,不要又是CSocket
快乐鹦鹉
2005-10-08
打赏
举报
回复
显然比在单线程中容易出现问题。
socket
的write/send还是是否是
线程
安全?
在多
线程
的网络服务器程序
中
, 对
同一个
客户端多
线程
同时发送数据是经常可能发生的事情, 也就是有可能会多
线程
的对一个fd调用send/write, 那么这种操作是否需要加锁?并发写套接字是否导致系统缓冲区数据混乱呢? 网上搜 了下,有人说可以写,有人说不能,linux man page也没有说明。 看来需要写程序测试。 写了个server的代码进行 测试。 10个
线程
同时对一个fd进行
多
线程
同时写
socket
是否需要加锁(转)
[打印] [订阅] [收藏] [推荐给朋友] [本帖文本页] yuangong 精灵
socket
同时读写
问题
如果是
多个
线程
同时写
socket
,那么在临界区里工作的
线程
为了保证数据包的完整发送,必须循环发送等待,直到数据都发送到系统缓冲区才能离开临界区。 而这样就导致
socket
的行为与阻塞方式发送无异,发送效率因此而被限制。 所以一个好的tcp
socket
处理框架,应该是只有一个
线程
来负责数据的收发,从而避免那些无穷无尽的同步
问题
。 如果需要
多个
线程
同时读访问或写访问
同一个
tcp
socket
,
socket
多
线程
同时
使用
同一个
sockt_fd会
出现
什么情况?
如果
多个
线程
同时
使用
同一个
socket
_fd,可能会
出现
以下
问题
: 数据混乱:由于
多个
线程
同时向
socket
_fd写入数据,会导致数据混乱。因为不同
线程
的写入顺序和速度不同,有可能
多个
线程
的数据在
socket
中
交错
出现
,导致数据丢失或无法解析。 状态不一致:
多个
线程
同时对
同一个
socket
_fd进行状态修改,可能会导致状态不一致。例如,一个
线程
关闭了
socket
_fd,但另一个
线程
仍然在试图向...
Socket
实例,实现
多个
客户端连接
同一个
服务端代码&TCP网络编程 Server
Socket
和
Socket
实现多客户端聊天
Java
socket
(套接字)通常也称作"套接字",用于描述ip地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
使用
socket
实现
多个
客户端和同一客户端通讯;首先客户端连接服务端发送一条消息,服务端接收到消息后进行处理,完成后再回复客户端一条消息。服务端代码客户端代码接下来模拟一下:1.首先运行服务端2.接着运行客户端(开三个客户端请求)为了演示有所区分,服务端我
使用
的是eclipse工具,客户端
使用
的是intellij idea工具。
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章