免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
1234567
最近访问板块 发新帖
楼主: yuangong
打印 上一主题 下一主题

请教:多线程同时写socket是否需要加锁 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
61 [报告]
发表于 2007-10-17 17:02 |只看该作者
原帖由 yuangong 于 2007-10-17 13:41 发表
其实这种情况很常见,为什么说是设计的问题?
举个例子:
一个porxy服务器,一边连接客户端,一边连接服务端的80端口.对于每个客户的连接处理为一个线程,收到客户消息转发到服务器.


httpd - 2.2 里面是如何做的???


(PS:一直以来只编译,没具体看过程序代码)

论坛徽章:
0
62 [报告]
发表于 2007-10-17 17:23 |只看该作者
PROXY, 对于CLIENT的一个连接,就建立一个到SERVER的连接.
所以,混杂的情况是没有的.

不同的FLOW的包混在一个LINK中是设计出问题了.

原帖由 snow888 于 2007-10-17 17:02 发表


httpd - 2.2 里面是如何做的???


(PS:一直以来只编译,没具体看过程序代码)

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
63 [报告]
发表于 2007-10-18 09:42 |只看该作者
TCP的话,这种设计是有问题的,标准代理服务器没有这么搞的
UDP的话,这种设计也不多见

我倒是干过这么一件事情
1个程序2000个线程,共享一个UDP套接字,不加锁
所有线程都通过这个fd发送日志
所有日志信息都是固定的1024字节,发送都是调用一次send()完成
在消息长度恒定并且只发送不接收这个特定条件下
工作效果还行
不会出现某个线程的日志和另外一个交错的情况
但是会丢失很少量日志,原因是UDP导致的

论坛徽章:
0
64 [报告]
发表于 2008-08-14 16:13 |只看该作者

sdf

sdf

论坛徽章:
0
65 [报告]
发表于 2012-02-18 16:43 |只看该作者
selfrun 发表于 2007-10-09 10:20
如果需要多个线程同时读访问或写访问同一个tcp socket, 那多半是程序设计上出了问题。

对于tcp的传输,都 ...


同意
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP