线程1从文件读取,因为线程2写入同一文件

时间:2018-06-05 07:30:15

标签: c++ windows multithreading file

线程1(T1)使用

创建文件
FILE *MyFile = tmpfile();
然后

线程2(T2)开始写入文件。当线程2正在写入时,线程1偶尔会从文件中读取。

我将其设置为当T1正在读取时T2暂时暂停,但由于T1只读取部分文件,T2不会写入(文件按顺序写入),I'我想知道是否有必要暂停T2。我知道如果FILE被固定大小的数组/向量替换,那就没问题。只是想知道光盘与内存有何不同。

编辑。

使用fseek和fwrite完成写入。读取是使用fseek和fread完成的。我认为这是一个给定但可能不是来自一些评论。我想如果T1确定在T2 fseeks定位X的同时定位Y,那么谁知道下一个读或写将从哪里开始。请看管道,谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

在处理单个线程时,在FILE上混合读取和写入甚至都不安全。从fopen的手册页:

  

读取和写入可以以任何顺序混合在读/写流上。注意ANSI C          要求输出和输入之间的文件定位功能介入,除非输入          操作遇到文件结束。 (如果不满足此条件,则允许读取          返回最近的写入结果。)因此这是一个好习惯(和          确实有时需要在Linux下)在fseek(3)或fgetpos(3)之间进行操作          在这样的流上写和读操作。这个操作可能是一个明显的无操作(如          fseek(...,0L,SEEK_CUR)调用其同步副作用)。

因此,不要假设读取​​和写入与您神奇地同步,并保护使用互斥锁访问FILE。