问个多线程写文件的问题,使用fwrite
我对文件操作这一块一直鲜有涉及,还请有经验者指教,问题如下:
我在做一个文件传送系统,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还没来得及试,试了我再补充上。
再也没有在其它环境下试过了。
请问我这个问题要怎样解决?