问个多线程写文件的问题,使用fwrite

youngwolf youngwolf 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我对文件操作这一块一直鲜有涉及,还请有经验者指教,问题如下:

我在做一个文件传送系统,c/s结构。支持文件分块多线程下载,比如我有两个线程,文件总大小200K,则开始下载之前,每个线程用fopen(..., "w+b");得到FILE结构,是有序的,所以是线程1创建并打开文件,线程2(包括后面的线程,如果有的话)打开文件。

当开始数据传送之前,线程1 fseek到0的位置,线程2 fseek到100K的位置(两个seek已经在多线程中的,先后无法保证,甚至同时),之后,线程1和2完全异步的接收数据,并fwrite到FILE,每个线程收完数据之后调用fclose(也是完全异步的,在多线程之中),所有线程都结束之后,文件传送完成。

问题表现:
在win7 64bit下,隅尔会出现接收的文件内容不正确,但都是前面的内容不正确,就是线程1负责的部分,而且不正确的数据的数量也不确定,但总是最前面的不正确,比如线程1负责100K的数据,有时候是0-10K不对,有时候是0-20K不对。

在fedora 17 64bit下,从来没有出现过问题,ubuntu 12.04 LTS 64bit还没来得及试,试了我再补充上。

再也没有在其它环境下试过了。

请问我这个问题要怎样解决?
...全文

相关推荐

评论 13
收藏 已收藏
分享
返回顶部
youngwolf
VC/MFC 16,550 成员 421,606 内容