免费注册 查看新帖 |

Chinaunix

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

多个线程同时读取一个配置文件,老出错怎么办 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-10-13 17:13 |只看该作者
原帖由 kouu 于 2009-10-13 13:50 发表
多线程可以使用同一个文件fd进行操作,这个文件的打开实例是完全共享的。如果多个线程并发地读这个fd,那么每个线程读取的内容可能是不连续的,加锁也没有用。

比如,文件打开后,读取位置是0。线程1读了5个 ...


我就是每个线程都fopen(cfgfile, “r”);
第一个线程fseek 然后fgets
第二个线程也fseek, 然后fgets

但是却出现了这样的事情,虽然是不同的fp ,但是第二个线程的fseek和fgets 之间的时候,第一个线程fgets了,当第二个线程fgets的时候,第二个线程的fp的位置已经不是
第二个线程fseek后的位置了!!

论坛徽章:
0
12 [报告]
发表于 2009-10-13 17:16 |只看该作者
原帖由 net_robber 于 2009-10-13 14:58 发表

这个方法不错

mmap到内存中


然后各个线程当内存段用

我的是有多个配置文件,多个线程间有可能同时读同一个配置文件,有可能读的不是一个。所有不知道怎么把多个配置文件的内容弄到内存中,而且可以区分出来哪个内存的内容是那个配置文件的

论坛徽章:
0
13 [报告]
发表于 2009-10-13 18:24 |只看该作者
真想多线程共同读的话,可以用最笨的方法,每个线程都记录下当前自己读到的位置,下次将文件指针搞回自己的原位置呗。

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
14 [报告]
发表于 2009-10-13 18:46 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
15 [报告]
发表于 2009-10-13 19:42 |只看该作者
mark一下

论坛徽章:
1
黑曼巴
日期:2020-02-27 22:54:26
16 [报告]
发表于 2009-10-13 19:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
17 [报告]
发表于 2009-10-13 20:00 |只看该作者
原帖由 c/unix 于 2009-10-13 19:57 发表



楼主我替你试过了

open可以,每个线程一个fd,不共享offset

谢谢 !明天试试!

论坛徽章:
0
18 [报告]
发表于 2009-10-14 13:39 |只看该作者
原帖由 c/unix 于 2009-10-13 19:57 发表



楼主我替你试过了

open可以,每个线程一个fd,不共享offset


我试了 可以是可以,可是速度慢死了,速度和以前相差不止百倍!!

郁闷了!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP