В моем приложении я постоянно записываю данные в file1 и сбрасываю их на устройство. В другом потоке я читаю данные из file1 и записываю их в file2 .
Каждый раз, когда я делаю fwrite + fflush в файле1, я даю сигнал другому потоку начать чтение из него. Другой поток читает данные из файла file1 и выгружает их в файл file2. Довольно простая логика. Кроме того, через каждые несколько минут я возвращаюсь к началу файла1 и начинаю перезаписывать старые данные.
Теперь моя проблема состоит в том, что, как только я начинаю перезаписывать данные в file1 , данные, считанные в file2, иногда старые данные (т.е. данные, записанные в предыдущей итерации), даже если пишущий поток сообщил, что записал новые данные (и сбросил их).
Я пишу и читаю с твердотельного накопителя (128 ГБ SAMSUNG серии 470, если это помогает) на [C + linux + arm platfrom]. Я чувствую, что есть проблема с кэшем процессора. Возможно, запись поступает в кэш, а чтение потоком считывателя происходит из флэш-памяти и, следовательно, устаревших данных.
Проблема в том, что эта проблема возникает, если SSD отформатирован с NTFS. Если я отформатирую его с помощью ext3, проблема исчезнет. К сожалению, NTFS является жестким требованием. Другое интересное наблюдение состоит в том, что если у меня есть два потока чтения, оба получают устаревшие данные в разные моменты времени.
Событие после отключения кэша записи SSD (с hdparm -W0 / dev / sda1 ), я получаю ту же проблему с NTFS. Я плохо зацикливаюсь на этом больше недели.
Есть идеи, что происходит, и почему так происходит?
Любая помощь будет на вес золота ...
EDIT Оказывается, что драйвер NTFS не любит, когда я перезаписываю файл, перематывая указатель файла. Это известная вещь?