在我的应用程序中,我不断将数据写入file1并将其刷新到设备。在另一个线程中,我正在从file1读取数据并将其写入file2。
每次我在 file1 上执行fwrite + fflush时,我都会向另一个线程发出信号以开始从中读取。另一个线程从file1 中读取数据并将其转储到file2 中。很简单的逻辑。此外,每隔几分钟,我就会回到 file1 的开头并开始覆盖旧数据。
现在我的问题是,一旦我开始覆盖file1中的数据,读入 file2 的数据有时是旧数据(即在前一次迭代中写入的数据),即使写入器线程已经发出信号表示它写入了新数据(并刷新了它)。
我正在 [C + linux + arm platfrom] 上写入和读取固态驱动器(128 GB SAMSUNG 470 系列,如果有帮助的话)。我觉得处理器缓存有问题。也许写入进入缓存,读取器线程的读取来自闪存,因此是陈旧的数据。
这里的问题是,如果 SSD 使用 NTFS 格式化,则会出现此问题。如果我用 ext3 格式化它,问题就消失了。不幸的是,NTFS 是一项硬性要求。另一个有趣的观察是,如果我有两个阅读器线程,它们都会在不同的时刻获得陈旧的数据。
禁用 SSD 写入缓存(使用hdparm -W0 /dev/sda1)后的事件,我遇到了与 NTFS 相同的问题。一个多星期以来,我一直坚持这一点。
知道发生了什么,为什么会这样?
任何帮助都将物超所值……
编辑原来NTFS驱动程序不喜欢我通过倒回文件指针来覆盖文件。这是众所周知的事情吗?