免费注册 查看新帖 |

Chinaunix

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

关于多线程对同一个文件进行写操作,记得坛子里面讨论过,不需要互斥,原因什么来着? [复制链接]

论坛徽章:
0
41 [报告]
发表于 2010-10-20 09:50 |只看该作者
在用户程序中的”同时“在OS里面可以是同时可以是不同时。
要区分开不同地方的含义。
那个SOCKET锁保证OS中不同时写同一个SOCKET.
如果无那个锁,OS中就会出现同时写一个SOCKET的情况了。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
42 [报告]
发表于 2010-10-20 10:00 |只看该作者
如果不是为了防止交叉,那这锁有什么用吗?
----------
防止2个进程/线程同时写。
交叉不是“同时写”引 ...
思一克 发表于 2010-10-20 09:47



1.也就是说休眠的时候会让出锁?
2.对于大文件写来说,这个粗体部分(lock_sock(sk))的锁根本没什么作用了,反正锁不锁都有可能发生交叉的情况

论坛徽章:
0
43 [报告]
发表于 2010-10-20 10:19 |只看该作者
1.也就是说休眠的时候会让出锁?
2.对于大文件写来说,这个粗体部分(lock_sock(sk))的锁根本没什么作用了,反正锁不锁都有可能发生交叉的情况
------
如果不锁,2个进程在OS中不同时写了吗?
那不是交叉问题,而是全乱套问题。

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
44 [报告]
发表于 2010-10-20 10:35 |只看该作者
1.也就是说休眠的时候会让出锁?
2.对于大文件写来说,这个粗体部分(lock_sock(sk))的锁根本没什么作用了, ...
思一克 发表于 2010-10-20 10:19



你的意思是交叉错误的话,只是数据乱了而已,但“全乱套”的话就不只数据乱了,而且其他也乱了(比如:TCP发送窗口更新之类的)?

论坛徽章:
0
45 [报告]
发表于 2010-10-20 10:52 |只看该作者
你的意思是交叉错误的话,只是数据乱了而已,但“全乱套”的话就不只数据乱了,而且其他也乱了(比如:TCP发送窗口更新之类的)?
----------
是的。我估计不死机就不错了。
这个结果可以实验。
你将内核SEND那里的锁头去掉,编译内核,启动用网络看看啥结果?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
46 [报告]
发表于 2010-10-20 11:14 |只看该作者
你的意思是交叉错误的话,只是数据乱了而已,但“全乱套”的话就不只数据乱了,而且其他也乱了(比如:TCP发 ...
思一克 发表于 2010-10-20 10:52



    还有问题:
1.释放锁的时机除了“休眠”,中断或者时间片用完有可能释放锁吗? 如果可以,就有问题2了
2.因为中断或者时间片用完是随时都有可能发生的,那么“全乱套”的问题还有可能发生了

论坛徽章:
0
47 [报告]
发表于 2010-10-20 11:38 |只看该作者
还有问题:
1.释放锁的时机除了“休眠”,中断或者时间片用完有可能释放锁吗? 如果可以,就有问题2了
2.因为中断或者时间片用完是随时都有可能发生的,那么“全乱套”的问题还有可能发生了
--------------
只要每个时刻只有一个进程在用,就不会发生全乱的情况。

论坛徽章:
11
未羊
日期:2013-12-16 12:45:4615-16赛季CBA联赛之青岛
日期:2016-04-11 19:17:4715-16赛季CBA联赛之广夏
日期:2016-04-06 16:34:012015亚冠之卡尔希纳萨夫
日期:2015-11-10 10:04:522015亚冠之大阪钢巴
日期:2015-07-30 18:29:402015亚冠之城南
日期:2015-06-15 17:56:392015亚冠之卡尔希纳萨夫
日期:2015-05-15 15:19:272015亚冠之山东鲁能
日期:2015-05-14 12:38:13金牛座
日期:2014-12-04 15:34:06子鼠
日期:2014-10-16 13:40:4715-16赛季CBA联赛之八一
日期:2016-07-22 09:41:40
48 [报告]
发表于 2010-10-20 11:40 |只看该作者
还有问题:
1.释放锁的时机除了“休眠”,中断或者时间片用完有可能释放锁吗? 如果可以,就有问 ...
chenzhanyiczy 发表于 2010-10-20 11:14


感觉应该会释放吧, 但也不会全乱套; 和休眠释放锁不一样吗?

论坛徽章:
1
申猴
日期:2014-02-11 14:50:31
49 [报告]
发表于 2010-10-20 11:51 |只看该作者
还有问题:
1.释放锁的时机除了“休眠”,中断或者时间片用完有可能释放锁吗? 如果可以,就有问题2了
2. ...
思一克 发表于 2010-10-20 11:38



不太理解,不过我还是觉得有机率出现全乱的情况(当然,这是不可能的,内核不可能设计成这样)。只是现在没有找到答案来推翻我的这个疑虑。

另外:
”休眠“的时候,释放锁了,再醒来的时候,它还会不会检查相关状态并更新?没看到(TCP有很多状态,有缓冲区,有窗口,每个都是检查一遍的话很费时的),如果没有的话岂不是还是乱套了?

论坛徽章:
0
50 [报告]
发表于 2010-10-20 14:00 |只看该作者
还有问题:
1.释放锁的时机除了“休眠”,中断或者时间片用完有可能释放锁吗? 如果可以,就有问题2了
2. ...
思一克 发表于 2010-10-20 11:38



    看了一遍大家的讨论,没得出到底要不要加锁的啊?请克哥给予提示?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP