免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
31 [报告]
发表于 2007-08-30 13:30 |只看该作者
EN 同意 FLW2 的意见.

我想flw2 是想让你在 send_n 的时候加锁
虽然系统send 是原子的..但不保证 send_n是原子的..所以要加锁以保证 线程A send_n完后.
线程B再send_n .

论坛徽章:
0
32 [报告]
发表于 2007-08-30 14:31 |只看该作者
思一克在另外一个贴子里说write < 4096 个字节的数据是原子的,那send呢?也这样吗?

论坛徽章:
0
33 [报告]
发表于 2007-08-30 14:47 |只看该作者
我那个帖子是说写PIPE4096以下肯定是原子的。(pipe_buf大小)
写文件不是。
写socket, 好象MTU--头大小(约等于1400)以下是原子的。但不是非常肯定。


原帖由 空灵静世 于 2007-8-30 14:31 发表
思一克在另外一个贴子里说write < 4096 个字节的数据是原子的,那send呢?也这样吗?

论坛徽章:
0
34 [报告]
发表于 2007-08-30 14:56 |只看该作者
原帖由 思一克 于 2006-9-17 23:48 发表

2) 如果写文件, 每次写小于4096, 也是原子的, 数据不交叉, 也不需要LOCK. 结论用程序测试是对的,但没有得到可靠的理论根据. 数据大于4096, 不是原子的. 对于写LOG file, 一行一行的写, 因为每行<<4096,所以程序的结果是原子的.

这里不是说写文件<4096也是原子的吗?

论坛徽章:
0
35 [报告]
发表于 2007-08-30 15:03 |只看该作者
不是。我说了没有得到可靠的论据支持。


原帖由 空灵静世 于 2007-8-30 14:56 发表

这里不是说写文件

论坛徽章:
0
36 [报告]
发表于 2007-08-30 15:09 |只看该作者
我刚学网络编程的时候也傻到给socket加锁,后来用代码验证是不需要加锁的

论坛徽章:
0
37 [报告]
发表于 2007-08-30 15:32 |只看该作者
原帖由 lanneret_sky 于 2007-8-30 15:09 发表
我刚学网络编程的时候也傻到给socket加锁,后来用代码验证是不需要加锁的


呵呵,我觉得代码可以证明需要做什么。而不能证明不需要做什么。

就好比一个bug 100万年才可能发生一次,我们不能跑1年甚至1万年就说程序没有bug

论坛徽章:
0
38 [报告]
发表于 2007-08-30 15:55 |只看该作者
socket写时基本上没有加锁的需求。多个不同的程序同时写一个socket,一般没有这样做的

论坛徽章:
0
39 [报告]
发表于 2007-08-30 17:11 |只看该作者
要加锁

论坛徽章:
0
40 [报告]
发表于 2007-08-30 19:09 |只看该作者

回复 #37 flw2 的帖子

归纳法只能证伪,不能证实
呵呵
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP